home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr18 / dunegon.zip / DUNGEON.BAS next >
BASIC Source File  |  1995-01-03  |  68KB  |  2,424 lines

  1.  
  2.  
  3. REM   ================================================================
  4. REM   =                                                              =
  5. REM   =                                                              =
  6. REM   =              D U N G E O N      B A T T L E                  =
  7. REM   =                                                              =
  8. REM   =                                                              =
  9. REM   =              (C)  1994  BY  ANTHONY DUNLEAVY                 =
  10. REM   =                                                              =
  11. REM   =                                                              =
  12. REM   =                     HIT <F5> TO PLAY                         =
  13. REM   =                                                              =
  14. REM   =                                                              =
  15. REM   =                                                              =
  16. REM   ================================================================
  17.  
  18.         
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.        
  177.        
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190. 1       GOTO 100: REM PASS OVER LINE 50 (END OF GAME)
  191.       
  192.         REM   ***     DUNGEON BATTLE  ***
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209. 20      REM     WARP INTO 2ND DUNGEON
  210.  
  211.         PRINT
  212.         PRINT "SUDDENLY, YOU VISION BECOMES BLURRED.  EVERYTHING IS OUT OF"; TAB(80); " "
  213.         PRINT "FOCUS.  THE ENTIRE DUNGEON BEGINS TO SHAKE AS IF THERE WAS AN"; TAB(80); " "
  214.         PRINT "EARTHQUAKE.  YOU HEAR LOUD SHREIKING NOISES THAT MAKE YOU LOSE"; TAB(80); " "
  215.         PRINT "ALL SENSE OF CONCENTRATION.  THIS CONTINUES FOR ABOUT 30 SECONDS "; TAB(80); " "
  216.         PRINT "ALTHOUGH IT SEEMS LIKE FOREVER.  "; TAB(80); " "
  217.         PRINT
  218.         PRINT "HIT <ENTER> TO CONTINUE";
  219.         GOSUB 50000
  220.        
  221.        
  222.         CLS
  223.  
  224.         PRINT "NOW YOUR VISION COMES BACK.  IT SURE DOEN'T SEEM LIKE YOU ARE IN THE"; TAB(80); " "
  225.         PRINT "SAME PLACE!"; TAB(80); " "
  226.         PRINT
  227.         PRINT "HIT <ENTER> TO CONTINUE";
  228.         GOSUB 50000
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.         GOTO 50001002
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265. 50      REM     END OF GAME
  266.         END
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279. 100     GOSUB 100000
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.         COLOR 3, 6
  288.         CLS
  289.         
  290.         
  291.         COLOR 2, 4
  292.         PRINT TAB(29); "*** DUNGEON BATTLE ***"; TAB(80); " "
  293.         PRINT TAB(80); " "
  294.         PRINT TAB(27); "10/94  BY ANTHONY DUNLEAVY"; TAB(80); " "
  295.         PRINT
  296.         PRINT
  297.         PRINT
  298.         PRINT
  299.         PRINT
  300.  
  301.  
  302.         COLOR 4, 2
  303.         PRINT TAB(34); "OPTIONS MENU"; TAB(80); " "
  304.         PRINT TAB(33); "--------------"; TAB(80); " "
  305.         PRINT TAB(80); " "
  306.         PRINT TAB(31); "<1> CREATE PLAYER"; TAB(80); " "
  307.         PRINT TAB(31); "<2> PLAY GAME"; TAB(80); " "
  308.         PRINT TAB(31); "<3> INSTRUCTIONS"; TAB(80); " "
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.         PRINT TAB(31); "<9> QUIT GAME"; TAB(80); " "
  316.         PRINT TAB(80); " ";
  317.         PRINT TAB(34); "OPTION(1-9)"; TAB(80); " "
  318.  
  319.         BEEP
  320.         
  321.         COLOR 3, 6
  322.  
  323.         PRINT TAB(39);
  324.         INPUT C$
  325.  
  326.  
  327.  
  328.         IF C$ = "1" THEN 500
  329.         IF C$ = "2" THEN 1000
  330.         IF C$ = "3" THEN 200
  331.  
  332.         IF C$ = "9" THEN 110
  333.  
  334. 101     GOTO 100
  335.  
  336.  
  337.  
  338. 110     REM     ***     END GAME        ***
  339.         END
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347. 200     REM     ***     GAME INSTRUCTIONS       ***
  348.         CLS
  349.         PRINT TAB(34); "INSTRUCTIONS"
  350.         PRINT TAB(33); "--------------"
  351.         PRINT
  352.         PRINT "DUNGEON BATTLE IS A TEXT BASED GAME.  THE OBJECT IS TO STAY ALIVE WHILE"
  353.         PRINT "COLLECTING AS MUCH GOLD AS POSSIBLE AND BUILDING UP YOUR CHARACTERS"
  354.         PRINT "ATTRIBUTES SUCH AS EXPERIENCE LEVEL, HIT POINTS, WEAPONRY, ETC."
  355.         PRINT
  356.         PRINT "IN ORDER TO PLAY, YOU FIRST MUST CHOOSE A CHARACTER TO PLAY WITH."
  357.         PRINT "THERE ARE 5 CHARACTERS IN MEMORY TO CHOOSE FROM.  YOU CAN ALSO HAVE THE"
  358.         PRINT "COMPUTER GENERATE A NEW CHARACTER FOR YOU, OR YOU CAN CREATE A CHARACTER"
  359.         PRINT "FROM SCRATCH.  "
  360.         PRINT
  361.         PRINT "EACH TIME YOU PLAY, THE DUNGEON WILL BE DIFFERENT.  THE COMPUTER"
  362.         PRINT "CREATES A NEW ONE EACH TIME RANDOMLY PLACING MONSTERS, POTIONS, TREASURE"
  363.         PRINT "CHESTS & SWORDS.  EACH MONSTER HAS IT'S STRENGTHS AND WEAKNESSES, AND"
  364.         PRINT "ARE STRONGER ON THE DEEPER LEVELS OF THE DUNGEON ( THERE ARE 10 LEVELS"
  365.         PRINT "IN THE DUNGEON ).  POTIONS ARE EITHER MAGICAL OR POISON, YOU CAN'T TELL UNTIL"
  366.         PRINT "YOU DRINK THEM.  TREASURE CHESTS ARE EITHER EMPTY, FILLED WITH GOLD, OR TRAPPED."
  367.         PRINT "SWORDS ARE EITHER MAGICAL OR CURSED.  "
  368.         PRINT
  369.         PRINT
  370.         PRINT "HIT <ENTER> TO CONTINUE"; : GOSUB 50000
  371.  
  372.         CLS
  373.         PRINT TAB(34); "INSTRUCTIONS"
  374.         PRINT TAB(33); "--------------"
  375.         PRINT
  376.         PRINT "WHEN YOU START THE GAME YOU WILL NOTICE YOUR CHARACTERS INFORMATION"
  377.         PRINT "ALWAYS LISTED AT THE TOP OF THE SCREEN.  THIS IS FOR QUICK REFERENCE WHILE"
  378.         PRINT "YOU ARE PLAYING.  TYPE 'CHAR' FOR A COMPLETE CHARACTER SHEET ANYTIME"
  379.         PRINT "DURING THE GAME."
  380.         PRINT
  381.         PRINT "TYPE 'HELP' ANYTIME DURING THE GAME FOR A LIST OF USEABLE COMMANDS."
  382.         PRINT
  383.         PRINT "THERE ARE ALSO SOME SECRET THINGS YOU CAN DO, SO TRY SOME THINGS"
  384.         PRINT "THAT YOU THINK MIGHT WORK!  TRY TO FIND THE GENEROUS WIZARD OR THE"
  385.         PRINT "WARP ZONE INTO THE SECOND DUNGEON!"
  386.         PRINT
  387.         PRINT "HIT <ENTER> TO CONTINUE"; : GOSUB 50000
  388.         GOTO 100
  389.  
  390.  
  391.  
  392. 1000    REM     ***     PLAY GAME       ***
  393.         REM STARTING
  394.         DUNGEON = 1
  395.         O$ = ""
  396.         HPC = HP: REM HPC = 100% HEALTH
  397.         COLOR 2, 0
  398.         CLS
  399.         SPELLS = LVL
  400.         
  401.         PRINT "PLEASE WAIT WHILE I CREATE A DUNGEON FOR YOU..........."
  402.  
  403.  
  404.         DL = LVL: IF LVL > 10 THEN DL = 10
  405.  
  406.  
  407.  
  408. 1001    REM SET UP ROOMS
  409.  
  410.         SIZE$(1) = "20 FOOT BY 20 FOOT"
  411.         SIZE$(2) = "20 FOOT BY 30 FOOT"
  412.         SIZE$(3) = "20 FOOR BY 40 FOOT"
  413.         SIZE$(4) = "30 FOOT BY 40 FOOT"
  414.         SIZE$(5) = "40 FOOT BY 40 FOOT"
  415.         SIZE$(6) = "50 FOOT BY 50 FOOT"
  416.  
  417.         DOOR$(1) = "NORTH AND SOUTH"
  418.         DOOR$(2) = "NORTH"
  419.         DOOR$(3) = "SOUTH"
  420.         DOOR$(4) = "EAST AND WEST"
  421.         DOOR$(5) = "EAST"
  422.         DOOR$(6) = "WEST"
  423.         DOOR$(7) = "NORTH, SOUTH, EAST AND WEST"
  424.         DOOR$(8) = "NORTH AND EAST"
  425.  
  426.         ITEM$(1) = "POTION"
  427.         ITEM$(2) = "SWORD"
  428.         ITEM$(3) = "TREASURE CHEST"
  429.  
  430.         MONSTER$(1) = "DRAGON"
  431.         MONSTER$(2) = "ORC"
  432.         MONSTER$(3) = "SKELETON"
  433.         MONSTER$(4) = "BEAR"
  434.         MONSTER$(5) = "ORGE"
  435.         MONSTER$(6) = "HOBGOBLIN"
  436.  
  437.  
  438.  
  439. 1002    REM SET UP MAP
  440.         FOR XX = 1 TO VAL(RIGHT$(TIME$, 2))
  441.         ZZ = INT(RND(1) * 2000) + 1
  442.         NEXT
  443.         RM = 1
  444.  
  445. 1003    REM SET UP ROOM
  446.  
  447.         FOR L = 1 TO 10: REM L = DUNGEON LEVEL
  448.  
  449.         RSIZE(1, L) = INT(RND(1) * 6) + 1
  450.         RDOOR(1, L) = 8: N(1, L) = 10: S(1, L) = 0: W(1, L) = 0: E(1, L) = 2
  451.         RITEM(1, L) = INT(RND(1) * 6) + 1: IF RITEM(1, L) = 3 THEN CHESTOPEN(1, L) = 1
  452.         RMONSTER(1, L) = INT(RND(1) * 10) + 1
  453.        
  454.         RSIZE(2, L) = INT(RND(1) * 6) + 1
  455.         RDOOR(2, L) = 7: N(2, L) = 4: S(2, L) = 3: W(2, L) = 1: E(2, L) = 5
  456.         RITEM(2, L) = INT(RND(1) * 6) + 1: IF RITEM(2, L) = 3 THEN CHESTOPEN(2, L) = 1
  457.         RMONSTER(2, L) = INT(RND(1) * 10) + 1
  458.        
  459.         RSIZE(3, L) = INT(RND(1) * 6) + 1
  460.         RDOOR(3, L) = 2: N(3, L) = 2: S(3, L) = 0: W(3, L) = 0: E(3, L) = 0
  461.         RITEM(3, L) = INT(RND(1) * 6) + 1: IF RITEM(3, L) = 3 THEN CHESTOPEN(3, L) = 1
  462.         RMONSTER(3, L) = INT(RND(1) * 10) + 1
  463.        
  464.         RSIZE(4, L) = INT(RND(1) * 6) + 1
  465.         RDOOR(4, L) = 3: N(4, L) = 0: S(4, L) = 2: W(4, L) = 0: E(4, L) = 0
  466.         RITEM(4, L) = INT(RND(1) * 6) + 1: IF RITEM(4, L) = 3 THEN CHESTOPEN(4, L) = 1
  467.         RMONSTER(4, L) = INT(RND(1) * 10) + 1
  468.        
  469.         RSIZE(5, L) = INT(RND(1) * 6) + 1
  470.         RDOOR(5, L) = 4: N(5, L) = 0: S(5, L) = 0: W(5, L) = 2: E(5, L) = 6
  471.         RITEM(5, L) = INT(RND(1) * 6) + 1: IF RITEM(5, L) = 3 THEN CHESTOPEN(5, L) = 1
  472.         RMONSTER(5, L) = INT(RND(1) * 10) + 1
  473.        
  474.         RSIZE(6, L) = INT(RND(1) * 6) + 1
  475.         RDOOR(6, L) = 7: N(6, L) = 8: S(6, L) = 7: W(6, L) = 5: E(6, L) = 9
  476.         RITEM(6, L) = INT(RND(1) * 6) + 1: IF RITEM(6, L) = 3 THEN CHESTOPEN(6, L) = 1
  477.         RMONSTER(6, L) = INT(RND(1) * 10) + 1
  478.        
  479.         RSIZE(7, L) = INT(RND(1) * 6) + 1
  480.         RDOOR(7, L) = 2: N(7, L) = 6: S(7, L) = 0: W(7, L) = 0: E(7, L) = 0
  481.         RITEM(7, L) = INT(RND(1) * 6) + 1: IF RITEM(7, L) = 3 THEN CHESTOPEN(7, L) = 1
  482.         RMONSTER(7, L) = INT(RND(1) * 10) + 1
  483.        
  484.         RSIZE(8, L) = INT(RND(1) * 6) + 1
  485.         RDOOR(8, L) = 3: N(8, L) = 0: S(8, L) = 6: W(8, L) = 0: E(8, L) = 0
  486.         RITEM(8, L) = INT(RND(1) * 6) + 1: IF RITEM(8, L) = 3 THEN CHESTOPEN(8, L) = 1
  487.         RMONSTER(8, L) = INT(RND(1) * 10) + 1
  488.        
  489.         RSIZE(9, L) = INT(RND(1) * 6) + 1
  490.         RDOOR(9, L) = 6: N(9, L) = 0: S(9, L) = 0: W(9, L) = 6: E(9, L) = 0
  491.         RITEM(9, L) = INT(RND(1) * 6) + 1: IF RITEM(9, L) = 3 THEN CHESTOPEN(9, L) = 1
  492.         RMONSTER(9, L) = INT(RND(1) * 10) + 1
  493.  
  494.         RSIZE(10, L) = INT(RND(1) * 6) + 1
  495.         RDOOR(10, L) = 3: N(10, L) = 0: S(10, L) = 1: W(10, L) = 0: E(10, L) = 0
  496.         RITEM(10, L) = INT(RND(1) * 6) + 1: IF RITEM(10, L) = 3 THEN CHESTOPEN(10, L) = 1
  497.         RMONSTER(10, L) = INT(RND(1) * 10) + 1
  498.  
  499.         
  500.  
  501.         NEXT L
  502.  
  503.  
  504.  
  505.         FOR SR = 1 TO 10
  506.  
  507.  
  508.         S = INT(RND(1) * 10) + 1
  509.         STEPS(S, SR) = 1: REM S = ROOM#,SR = DUNGEON LEVEL
  510.        
  511.  
  512.         
  513.  
  514.         NEXT SR
  515.         
  516.  
  517.  
  518.  
  519.         STP(S, 1) = 1: REM COMPUTER KNOWS STEPS ARE IN ROOM
  520.         
  521.  
  522.         FOR LP = 1 TO 10
  523.  
  524.         IF STEPS(1, LP) = 1 THEN STEPSONLEVEL(LP) = 1
  525.         IF STEPS(2, LP) = 1 THEN STEPSONLEVEL(LP) = 2
  526.         IF STEPS(3, LP) = 1 THEN STEPSONLEVEL(LP) = 3
  527.         IF STEPS(4, LP) = 1 THEN STEPSONLEVEL(LP) = 4
  528.         IF STEPS(5, LP) = 1 THEN STEPSONLEVEL(LP) = 5
  529.         IF STEPS(6, LP) = 1 THEN STEPSONLEVEL(LP) = 6
  530.         IF STEPS(7, LP) = 1 THEN STEPSONLEVEL(LP) = 7
  531.         IF STEPS(8, LP) = 1 THEN STEPSONLEVEL(LP) = 8
  532.         IF STEPS(9, LP) = 1 THEN STEPSONLEVEL(LP) = 9
  533.         IF STEPS(10, LP) = 1 THEN STEPSONLEVEL(LP) = 10
  534.  
  535.         
  536.         
  537.         
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.         FOR XX = 1 TO 10
  546.         IF RMONSTER(XX, LP) < 7 THEN ALIVE(XX, LP) = 1: GOSUB 60000
  547.         NEXT XX
  548.         NEXT LP
  549.  
  550.  
  551.  
  552.         REM     ASSIGN EXPERIENCE POINTS TO CHARACTER
  553.         IF PEXP = 0 OR PEXP < LVL * 1000 THEN PEXP = LVL * 1000: REM       PEXP = PLAYER EXPERIENCE POINTS
  554.  
  555.  
  556.  
  557. 1005    REM START
  558.         COLOR 2, 0
  559.         CLS
  560.         PRINT TAB(24); "D U N G E O N      B A T T L E"; TAB(80); " ";
  561.         GOSUB 300000: REM PRINT CHARACTER IMPRINT
  562.         COLOR 2, 0
  563.         GOSUB 2000: REM PRINT DESCRIPTION OF ROOM
  564.         COLOR 2, 0
  565.  
  566.         GOSUB 400000: REM programmer test
  567.        
  568.        
  569.         REM SEE IF CHARACTER WARPS INTO 2ND DUNGEON
  570.        
  571.         DVR = INT(RND(1) * 10) + 1
  572.         IF HP > 120 AND LVL > 12 AND GP > 1000 AND DVR = 5 AND DUNGEON = 1 THEN GOTO 20
  573.  
  574.        
  575.        
  576.        
  577.         GOTO 1005
  578.  
  579.  
  580.  
  581.  
  582. 2000    PRINT
  583.         REM COLOR 7, 4
  584.        
  585.        
  586.         REM PRINT TAB(29); "**ROOM # "; RM; " **LEVEL "; DL; " **"; TAB(80); " "
  587.         COLOR 0, 10
  588.         PRINT "= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ="; TAB(80); " "
  589.         PRINT "YOU ARE IN A ";
  590.         PRINT SIZE$(RSIZE(RM, DL)); " ROOM."; TAB(80); " "
  591.         PRINT "THERE IS A DOORWAY AT THE ";
  592.         PRINT DOOR$(RDOOR(RM, DL)); " OF THE ROOM."; TAB(80); " "
  593.  
  594. 2001    IF RITEM(RM, DL) < 4 THEN PRINT "YOU SEE A "; ITEM$(RITEM(RM, DL)); " IN THE ROOM."; TAB(80); " "
  595. 2002    IF RMONSTER(RM, DL) < 7 AND ALIVE(RM, DL) = 1 THEN PRINT "THERE IS A "; MONSTER$(RMONSTER(RM, DL)); " IN THE ROOM."; TAB(80); " "
  596. 2003    IF STEPSONLEVEL(DL) = RM AND DL = 1 THEN PRINT "THERE IS A STAIRWAY GOING DOWN IN THE ROOM."; TAB(80); " "
  597.         IF STEPSONLEVEL(DL) = RM AND DL = 10 THEN PRINT "THERE ARE STEPS HEADING UP IN THE ROOM."; TAB(80); " "
  598.         IF STEPSONLEVEL(DL) = RM AND DL > 1 AND DL < 10 THEN PRINT "THERE'S STEPS HEADING UP AND DOWN IN THE ROOM."; TAB(80); " "
  599.         IF RMONSTER(RM, DL) < 7 AND ALIVE(RM, DL) = 0 THEN PRINT "A DEAD "; MONSTER$(RMONSTER(RM, DL)); " IS ON THE FLOOR."; TAB(80); " "
  600.         
  601. 2004    PRINT "= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ="; TAB(80); " "
  602.  
  603. 2005    COLOR 3, 5
  604.         COLOR 2, 6
  605.         PRINT "YOUR LAST COMMAND>>>"; O$; TAB(80); " "
  606.        
  607.         COLOR 3, 5
  608.         GOSUB 460002
  609.  
  610.         IF M$ <> "" THEN COLOR 2, 9: PRINT M$; TAB(80); " ": COLOR 3, 5: M$ = ""
  611.         IF R$ <> "" THEN PRINT R$; TAB(80); " "
  612.         R$ = ""
  613.         IF F1$ <> "" THEN PRINT F1$; TAB(80); " "
  614.         IF F2$ <> "" THEN PRINT F2$; TAB(80); " "
  615.        
  616.         F1$ = "": F2$ = ""
  617.  
  618.        
  619.        
  620.         PRINT
  621.        
  622.         IF OVER = 1 THEN 50
  623.  
  624.        
  625.         
  626.        
  627.        
  628.        
  629.        
  630.        
  631.         RETURN
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692. 500     REM     ***     CREATE PLAYER-CHARACTER         ***
  693.        
  694.         REM     INPUT NAME
  695.         REM     INPUT AGE  YOUNG HAVE MORE STRENGTH/ OLD HAVE MORE WISDOM
  696.         REM     INPUT SEX  MALES HAVE MORE STRENGTH   FEMALES SMARTER
  697.         REM     STRENGTH  MORE = MORE DAMAGE
  698.         REM     WISDOM  MORE = CAST BETTER SPELLS
  699.         REM     DEXTERITY   SPEED OF MOVEMENT,REACTION,ETC
  700.         REM     HIT POINTS =LELEL*1D10 + STR/4
  701.         REM     SPELLS # = 2 + 1(IF WISDOM >12)
  702.         REM     WEAPONS HAVE TO BE BOUGHT
  703.         REM     MONEY TO START WITH = 200 + RANDOM 1-100
  704.         REM
  705.        
  706.        
  707.        
  708.        
  709.         COLOR 2, 0
  710.         CLS
  711.         COLOR 3, 5
  712.         PRINT TAB(80);
  713.         PRINT TAB(23); "C R E A T E      C H A R A C T E R"; TAB(80);
  714.         PRINT TAB(21); "======================================="; TAB(80);
  715.         PRINT
  716.         PRINT
  717.         PRINT
  718.         COLOR 2, 0
  719.         PRINT TAB(29); "CHARACTER OPTIONS MENU"
  720.         PRINT TAB(28); "------------------------"
  721.         PRINT
  722.         PRINT TAB(22); "<1> LOAD CHARACTER FROM DISK"
  723.         PRINT TAB(22); "<2> USE A CHARACTER FROM MEMORY"
  724.         PRINT TAB(22); "<3> LET COMPUTER CREATE CHARACTER"
  725.         PRINT TAB(22); "<4> CREATE CHARACTER MANUALLY"
  726.         PRINT TAB(22); "<9> RETURN TO PREVIOUS MENU"
  727.         PRINT
  728.         TB = 34
  729.         GOSUB 50000
  730.  
  731. 501                IF O$ = "1" THEN 550
  732.                    IF O$ = "2" THEN 600
  733.                    IF O$ = "3" THEN 700
  734.                    IF O$ = "4" THEN 900
  735.                    IF O$ = "9" THEN 100
  736.  
  737.                    GOTO 500
  738.  
  739.  
  740. 550     REM     ***     LOAD CHARACTER FROM DISK        ***
  741.         COLOR 2, 0
  742.         PRINT
  743.         PRINT TAB(21); "THIS FUNCTION NOT YET FULLY FUNCTIONAL"
  744.         PRINT
  745.         GOSUB 50000
  746.         GOTO 501
  747.  
  748.  
  749.  
  750.  
  751. 600     REM     ***     USE CHARACTER IN MEMORY         ***
  752.         CLS
  753.         PRINT TAB(26); "LIST OF CHARACTERS AVAILABLE"
  754.         PRINT TAB(25); "=============================="
  755.         PRINT
  756.         PRINT
  757.         PRINT
  758.         PRINT
  759.         PRINT TAB(32); "<1> ARKLIN"
  760.         PRINT TAB(32); "<2> ELROND"
  761.         PRINT TAB(32); "<3> BENZAR"
  762.         PRINT TAB(32); "<4> KNARF"
  763.         PRINT TAB(32); "<5> KYRA"
  764.         IF ZN$ <> "" THEN PRINT TAB(32); "<6> "; ZN$
  765.         PRINT
  766.         PRINT TAB(5); "ENTER # OF CHARACTER TO VIEW ATTRIBUTES OR <9> TO RETURN TO PREVIOUS MENU"
  767.         TB = 33
  768.         GOSUB 50000
  769.         COLOR 2, 0
  770.  
  771.  
  772. 601     REM N$=NAME,AGE=AGE,SEX$=SEX,STR=STRENGTH,WIS=WISDOM,DEX=DEXTERITY
  773.         REM HP=HIT POINTS,SP=# OF SPELLS,SP(#)=SPELL NUMBER,LVL=LEVEL
  774.         REM WP=WEAPON#,WP$=WEAPON DESC,IT(#)=ITEM# IT$(#),CASH=MONEY
  775.         REM WEAPONS HAVE DAMAGE    DAM(WP) = DAMAGE
  776.         REM ARM$ = ARMOUR
  777.         HPC = 0
  778. 605     IF O$ <> "1" THEN 606
  779.         N$ = "ARKLIN": REM ALL AROUND AVERAGE
  780.         AGE = 28: SEX$ = "MALE": STR = 16: WIS = 14: DEX = 15
  781.         HP = 28: SP = 3: SP1 = 1: SP2 = 2: SP3 = 3
  782.         LVL = 3: WP = 1: AC = 3
  783.         ARM = 2: GP = 90: PEXP = 3500
  784.         GOTO 620
  785.         
  786. 606     IF O$ <> "2" THEN 607: REM STRONG
  787.         N$ = "ELROND"
  788.         AGE = 39: SEX$ = "MALE": STR = 18: WIS = 11: DEX = 17
  789.         HP = 44: SP = 2: SP1 = 1: SP2 = 2: SP3 = 0
  790.         LVL = 5: WP = 2: PEXP = 5650
  791.         ARM = 1: GP = 35: AC = 1
  792.         GOTO 620
  793.  
  794. 607     IF O$ <> "3" THEN 608
  795.         N$ = "BENZAR"
  796.         AGE = 21: SEX$ = "MALE": STR = 18: WIS = 15: DEX = 18
  797.         HP = 28: SP = 2: SP1 = 2: SP2 = 3: SP3 = 0
  798.         LVL = 1: WP = 1: PEXP = 1140
  799.         ARM = 3: GP = 185: AC = 6
  800.         GOTO 620
  801.  
  802. 608     IF O$ <> "4" THEN 609
  803.         N$ = "KNARF"
  804.         AGE = 54: SEX$ = "MALE": STR = 14: WIS = 18: DEX = 13
  805.         HP = 61: SP = 2: SP1 = 3: SP2 = 4: SP3 = 0
  806.         LVL = 6: WP = 1: PEXP = 6285
  807.         ARM = 2: GP = 50: AC = 3
  808.         GOTO 620
  809.  
  810. 609     IF O$ <> "5" THEN 610
  811.         N$ = "KYRA"
  812.         AGE = 31: SEX$ = "FEMALE": STR = 16: WIS = 15: DEX = 18
  813.         HP = 32: SP = 2: SP1 = 1: SP2 = 4: SP3 = 0
  814.         LVL = 3: WP = 2: PEXP = 3720
  815.         ARM = 2: GP = 75: AC = 4
  816.         GOTO 620
  817.  
  818. 610     IF O$ <> "6" THEN 611
  819.         N$ = ZN$
  820.         AGE = ZAGE: SEX$ = ZSEX$: STR = ZSTR: WIS = ZWIS: DEX = ZDEX
  821.         HP = ZHP: SP = ZSP: SP1 = ZSP1: SP2 = ZSP2: SP3 = ZSP3
  822.         LVL = ZLVL: WP = ZWP: PEXP = ZPEXP
  823.         ARM = ZARM: GP = ZGP: AC = ZAC
  824.         GOTO 620
  825.  
  826.  
  827.  
  828.  
  829.  
  830. 611     IF O$ = "9" THEN 500
  831. 612     GOTO 600
  832.  
  833.  
  834.  
  835. 620     REM PRINT CHARACTER
  836.         
  837.         GOSUB 120000:           REM PRINT OUT OF CHARACTER
  838.         PRINT
  839.         PRINT "USE THIS PLAYER? (Y/N)";
  840.         GOSUB 50000
  841.         IF O$ = "Y" THEN 100
  842.         IF O$ = "N" THEN 600
  843.         GOTO 620
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857. 700     REM     ***    COMPUTER CREATES CHARACTER       ***
  858.         REM
  859.         HPC = 0
  860.         AA$ = RIGHT$(TIME$, 2)
  861.         AA = VAL(AA$)
  862.         FOR XX = 1 TO AA: A = AAA = INT(RND(1) * 10) + 1: NEXT
  863.  
  864.  
  865.         N$ = "NO NAME YET"
  866.         SEX = INT(RND(1) * 2) + 1
  867.         IF SEX = 1 THEN SEX$ = "MALE"
  868.         IF SEX = 2 THEN SEX$ = "FEMALE"
  869.  
  870.         AGE = INT(RND(1) * 40) + 20
  871.  
  872.         STR = INT(RND(1) * 15) + 3
  873.         WIS = INT(RND(1) * 15) + 3
  874.         DEX = 45 - STR - WIS: IF DEX > 18 THEN DEX = 18
  875.  
  876.         WP = INT(RND(1) * 4) + 1
  877.         ARM = INT(RND(1) * 3) + 1
  878.         IF ARM = 1 THEN AC = 2
  879.         IF ARM = 2 THEN AC = 4
  880.         IF ARM = 3 THEN AC = 6
  881.  
  882.         GP = INT(RND(1) * 250) + 1
  883.  
  884.         LVL = INT(RND(1) * 5) + 1: PEXP = (LVL * 1000) + INT(RND(1) * 900) + 1
  885.  
  886.         GOSUB 110000: REM CALCULATE REST OF PLAYER
  887.  
  888.  
  889.  
  890. 701     GOSUB 120000: REM PRINT ON SCREEN
  891.  
  892.         PRINT
  893.         PRINT "(K)EEP PLAYER OR (R)ECREATE ANOTHER ONE ";
  894.         TB = 0
  895.  
  896.         GOSUB 50000
  897.  
  898.         IF O$ = "R" THEN 700
  899.         IF O$ = "K" THEN 710
  900.  
  901.         GOTO 701
  902.        
  903.        
  904. 710     IF N$ <> "NO NAME YET" THEN 100
  905.  
  906.  
  907.         PRINT "ENTER CHARACTER'S NAME";
  908.         GOSUB 50000
  909.         N$ = O$
  910.         GOSUB 130000:           REM     SET UP CHARACTER AS MEMORY CHARACTER
  911.         GOSUB 120000
  912.  
  913.         PRINT "HIT <RETURN> TO CONTINUE>";
  914.         GOSUB 50000
  915.         GOTO 100
  916.  
  917.  
  918.  
  919.        
  920.  
  921. 900     REM     ***     CREATE CHARACTER FROM SCRATCH   ***
  922.         COLOR 0, 7: CLS : HPC = 0
  923. 901     GOSUB 200000: REM PRINT CREATE CHARACTER IMPRINT
  924.         COLOR 0, 7
  925.         PRINT "ENTER CHARACTER'S NAME "; : GOSUB 50000: N$ = O$
  926. 902     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  927.         PRINT "<AGE> HAS AN EFFECT ON THE STRENGTH AND WISDOM OF YOUR CHARACTER."
  928.         PRINT "AGE OF 20-24 = +2 STRENGTH, -2 WISDOM."
  929.         PRINT "AGE OF 25-34 = +1 STRENGTH, -1 WISDOM."
  930.         PRINT
  931.         PRINT "ENTER AGE (20 TO 65)"; : GOSUB 50000: AGE = VAL(O$)
  932.         IF AGE < 20 OR AGE > 65 THEN 902
  933.  
  934.  
  935. 903     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  936.         PRINT "<SEX> HAS AN EFFECT ON STRENGTH AND WISDOM."
  937.         PRINT "MALES GET A +1 ON STRENGTH AND -1 ON WISDOM."
  938.         PRINT "FRMALES GET A +1 ON WISDOM AND -1 ON STRENGTH."
  939.         PRINT
  940.         PRINT "ENTER SEX (M)ALE OF (F)EMALE"; : GOSUB 50000
  941.         IF O$ = "M" OR O$ = "MALE" THEN SEX$ = "MALE": GOTO 904
  942.         IF O$ = "F" OR O$ = "FEMALE" THEN SEX$ = "FEMALE": GOTO 904
  943.         GOTO 903
  944.  
  945.  
  946. 904     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7: STR = 0: WIS = 0: DEX = 0
  947.         PRINT "YOU HAVE 45 POINT TO SPREAD ACROSS STRENGTH, WISDOM AND"
  948.         PRINT "DEXTERITY.  "
  949.         PRINT
  950.         PRINT "STRENGTH EFFECTS HIT POINTS, ARMOR CLASS & DAMAGE TO OPPONENTS."
  951.         PRINT "STRENGTH OF 16= +6 H.P., 17 = +7 H.P., 18 = +8 H.P."
  952.         PRINT "STRENGTH OF 18 ALSO GETS YOU -1 ON ARMOR CLASS (LOWER AC'S ARE BETTER)."
  953.         PRINT "STRENGTH OF 18 GETS YOU DOUBLE DAMAGE ON ALL ATTACKS."
  954.         PRINT
  955.         PRINT "WISDOM OF 18 = 3 SPELLS, 12 TO 17 = 2 SPELLS, 8 TO 11 = 1 SPELL."
  956.         PRINT "WISDOM UNDER 8 = NO SPELLS."
  957.         PRINT
  958.         PRINT "DEXTERITY OF 18 = -1 ARMOR CLASS (LOWER ARMOR CLASS IS BETTER)."
  959.         PRINT "DEXTERITY UNDER 12 = +1 ARMOR CLASS (HIGH AC'S ARE BAD.)"
  960.         PRINT
  961.        
  962. 905     PRINT "ENTER STRENGTH(3-18)"; : GOSUB 50000: STR = VAL(O$)
  963.         IF STR < 3 OR STR > 18 THEN 905
  964.  
  965. 906     COLOR 0, 7
  966.         PRINT "YOU HAVE "; 45 - STR; " POINTS LEFT TO DISTRIBUTE TOWARDS YOUR"
  967.         PRINT "WISDOM & DEXTERITY.  YOUR DEXTERITY WILL BE AUTOMATICALLY"
  968.         PRINT "CALCULATED WHEN YOU ENTER YOUR WISDOM ("; 45 - STR; "- WISDOM )."
  969.         PRINT
  970.         
  971. 907     PRINT "ENTER WISDOM(3-18)"; : GOSUB 50000: WIS = VAL(O$)
  972.         IF WIS < 3 OR WIS > 18 THEN 907
  973.         DEX = 45 - STR - WIS
  974. 910     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  975.         PRINT "STRENGTH  = "; STR
  976.         PRINT "WISDOM    = "; WIS
  977.         PRINT "DEXTERITY = "; DEX
  978.         PRINT
  979.         PRINT "IS THIS CORRECY (Y/N)"; : GOSUB 50000
  980.         IF O$ = "Y" THEN 920
  981.         IF O$ = "N" THEN 904
  982.         GOTO 910
  983.  
  984.  
  985. 920     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  986.         PRINT "BASED ON YOUR AGE AND SEX, HERE ARE YOUR ADJUSTED "
  987.         PRINT "STRENGTH, WISDOM & DEXTERITY POINTS:"
  988.         PRINT
  989.  
  990.         IF AGE < 35 THEN STR = STR + 1: WIS = WIS - 1
  991.         IF AGE < 25 THEN STR = STR + 1: WIS = WIS - 1
  992.         IF SEX$ = "MALE" THEN STR = STR + 1: WIS = WIS - 1
  993.         IF SEX$ = "FEMALE" THEN STR = STR - 1: WIS = WIS + 1
  994.         IF AGE > 25 THEN WIS = WIS + 1
  995.         IF AGE > 35 THEN WIS = WIS + 1
  996.         IF AGE > 55 THEN WIS = WIS + 1
  997.         IF STR > 18 THEN STR = 18
  998.         IF WIS > 18 THEN WIS = 18
  999.         IF WIS = 18 THEN SP = 3
  1000.         IF WIS > 10 AND WIS < 18 THEN SP = 2
  1001.         IF WIS < 11 THEN SP = 1
  1002.         IF WIS < 8 THEN SP = 0
  1003.  
  1004.  
  1005.  
  1006.         PRINT "STRENGTH  = "; STR
  1007.         PRINT "WISDOM    = "; WIS
  1008.         PRINT "DEXTERITY = "; DEX
  1009.         PRINT
  1010.  
  1011. 921     PRINT "HIT <RETURN> TO CONTINUE OR <9> TO RE-ENTER STR,WIS,DEX";
  1012.         GOSUB 50000
  1013.         IF O$ = "9" THEN 904
  1014.  
  1015.  
  1016.  
  1017. 922     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1018.         IF SP = 0 THEN 923
  1019.         PRINT "YOU CAN PICK "; SP; " SPELLS."
  1020.         PRINT
  1021.         PRINT "HERE ARE THE SPELLS YOU CAN CHOOSE FROM:"
  1022.         PRINT
  1023.         FOR XX = 1 TO 5
  1024.         PRINT "<"; XX; ">  "; SPELL$(XX): PRINT TAB(8); SPELLDESC$(XX)
  1025.         NEXT XX
  1026.         PRINT
  1027.         PRINT "SELECT SPELLS BY NUMBER."
  1028.         GOTO 924
  1029.  
  1030. 923     PRINT "YOU DO NOT HAVE ENOUGH WISDOM POINTS TO HAVE ANY SPELLS."
  1031.         PRINT
  1032.         PRINT "HIT <RETURN> TO CONTINUE"; : GOSUB 50000
  1033.         GOTO 930
  1034.  
  1035. 924     IF SP >= 1 THEN PRINT "SPELL #1 (1-5)";  ELSE 925
  1036.         GOSUB 50000: SP1 = VAL(O$)
  1037.         COLOR 0, 7
  1038.         IF SP1 < 1 OR SP1 > 5 THEN 924
  1039.  
  1040. 925     IF SP >= 2 THEN PRINT "SPELL #2 (DON'T DUPLICATE SPELL #1)";  ELSE 926
  1041.         GOSUB 50000: SP2 = VAL(O$)
  1042.         COLOR 0, 7
  1043.         IF SP2 < 1 OR SP2 > 5 OR SP2 = SP1 THEN 925
  1044.  
  1045. 926     IF SP = 3 THEN PRINT "SPELL #3 (DON'D DUPLICATE SPELL #1 OR #2)";  ELSE 927
  1046.         GOSUB 50000: SP3 = VAL(O$)
  1047.         COLOR 0, 7
  1048.         IF SP3 < 1 OR SP3 > 5 OR SP3 = SP2 OR SP3 = SP1 THEN 926
  1049.  
  1050.  
  1051.  
  1052.  
  1053. 927     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1054.         PRINT "HERE ARE THE SPELLS YOU HAVE SELECTED:"
  1055.         PRINT
  1056.         IF SP >= 1 THEN PRINT "SPELL #1 : "; TAB(20); SPELL$(SP1)
  1057.         IF SP >= 2 THEN PRINT "SPELL #2 : "; TAB(20); SPELL$(SP2)
  1058.         IF SP >= 3 THEN PRINT "SPELL #3 :"; TAB(20); SPELL$(SP3)
  1059.         PRINT
  1060.         PRINT "IS THIS CORRECT (Y/N)";
  1061.         GOSUB 50000
  1062.  
  1063. 928     IF O$ = "Y" THEN 930
  1064.         IF O$ = "N" THEN 922
  1065.  
  1066.  
  1067.  
  1068. 930     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1069.         GP = 300
  1070.         PRINT "SELECT WEAPON TO USE (YOU HAVE "; GP; " GOLD PIECES LEFT TO SPEND):"
  1071.         PRINT
  1072.         FOR XX = 1 TO 4
  1073.         PRINT "<"; XX; ">  "; WP$(XX); TAB(60); WPC(XX); " G.P."
  1074.         NEXT
  1075.         PRINT
  1076.         
  1077. 931     PRINT "SELECT WEAPON BY # (1-4)";
  1078.         GOSUB 50000
  1079.         O = VAL(O$)
  1080.         IF O > 4 OR O < 1 THEN 931
  1081.         IF WPC(O) > GP THEN PRINT "NOT ENOUGH GOLD TO BUY IT!": GOTO 931
  1082.         GP = GP - WPC(O)
  1083.         WP = O
  1084.  
  1085. 932     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1086.         PRINT "SELECT ARMOR TO WEAR (YOU HAVE "; GP; " GOLD PIECES LEFT TO SPEND."
  1087.         PRINT
  1088.         FOR XX = 1 TO 3
  1089.         PRINT "<"; XX; ">  "; ARM$(XX); TAB(60); ARMC(XX); " G.P."
  1090.         NEXT
  1091.         PRINT
  1092.  
  1093. 933     PRINT "SELECT ARMOR BY # (1-3)";
  1094.         GOSUB 50000
  1095.         O = VAL(O$)
  1096.         IF O > 3 OR O < 1 THEN 933
  1097.         IF ARMC(O) > GP THEN PRINT "NOT ENOUGH GOLD TO BUY IT!": GOTO 933
  1098.         GP = GP - ARMC(O)
  1099.         ARM = O
  1100.  
  1101. 944   COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1102.       PRINT "WEAPON :"; TAB(15); WP$(WP)
  1103.       PRINT "ARMOR :"; TAB(15); ARM$(ARM)
  1104.       PRINT
  1105.       PRINT "IS THIS CORRECT (Y/N)";
  1106.       GOSUB 50000
  1107.       IF O$ = "N" THEN 930
  1108.       IF O$ = "Y" THEN 950
  1109.       GOTO 944
  1110.  
  1111.  
  1112. 950     REM     LEVEL
  1113.         COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1114.         PRINT "LEVEL OF EXPERIENCE EFFECTS HOW MANY TIMES YOU CAN USE"
  1115.         PRINT "YOUR SPELLS AND YOU HIT POINTS."
  1116.         PRINT
  1117.         PRINT "FOR EVERY LEVEL OF EXPERIENCE, YOU CAN USE YOUR SPELLS ONCE."
  1118.         PRINT "YOU GET UP TO 10 HIT POINTS FOR EVERY LEVEL."
  1119.         PRINT
  1120.         PRINT "NOTE: YOU CAN ENTER ANY LEVEL AT THE PROMPT, BUT KEEP IN MIND"
  1121.         PRINT "THAT THE GAME LOSES IT'S FUN FACTOR IF YOU MAKE IT TOO EASY"
  1122.         PRINT "FOR YOURSELF BY BEING A SUPER-HIGH LEVEL CHARACTER."
  1123.         PRINT
  1124.         PRINT "ENTER EXPERIENCE LEVEL(1-20)";
  1125.         
  1126.         GOSUB 50000
  1127.         O = VAL(O$)
  1128.         IF O = 0 THEN 950
  1129.         IF O > 20 THEN 950
  1130.         LVL = O: IF PEXP = 0 THEN PEXP = LVL * 1000
  1131.  
  1132. 951     COLOR 0, 7: CLS : GOSUB 200000: COLOR 0, 7
  1133.         IF ARM = 1 THEN AC = 2
  1134.         IF ARM = 2 THEN AC = 4
  1135.         IF ARM = 3 THEN AC = 6
  1136.  
  1137.         HP = INT(RND(1) * 10) + 1
  1138.         HP = HP * LVL
  1139.         IF STR > 15 THEN HP = HP + (STR - 10)
  1140.        
  1141.         IF DEX < 12 THEN AC = AC + 1
  1142.         IF STR = 18 THEN AC = AC - 1
  1143.         IF DEX = 18 THEN AC = AC - 1
  1144.         IF AC < 1 THEN AC = 1
  1145.  
  1146.         
  1147.  
  1148.  
  1149. 952     PRINT "YOUR ARMOR CLASS IS "; AC
  1150.         PRINT "YOUR HIT POINTS ARE "; HP
  1151.         PRINT
  1152.         PRINT "(C)ONTINUE OR (R)E-CALCULATE HIT POINTS";
  1153.         GOSUB 50000
  1154.         IF O$ = "C" THEN 955
  1155.         IF O$ = "R" THEN 951
  1156.  
  1157. 955     GOSUB 120000
  1158.        
  1159.         PRINT
  1160.         COLOR 2, 4
  1161.         GOSUB 130000
  1162.         
  1163.        
  1164.        
  1165.         COLOR 0, 7
  1166.         PRINT
  1167.         PRINT TAB(21); "HIT <ENTER> TO CONTINUE.";
  1168.         GOSUB 50000
  1169.         GOTO 100
  1170.  
  1171.  
  1172. 50000   REM     ***     INPUT RESPONSE  ***
  1173.         SOUND 1500, 2
  1174.         IF TB > 0 THEN PRINT TAB(TB);
  1175.         TB = 0
  1176.         COLOR 7, 4: PRINT ">>>";
  1177.         INPUT O$
  1178.         IF O$ = "QUIT GAME" THEN END
  1179.  
  1180.         RETURN
  1181.  
  1182.  
  1183.  
  1184. 60000   REM GIVE MONSTER STATS
  1185.         
  1186.         IF RMONSTER(XX, LP) = 1 THEN 60010
  1187.         IF RMONSTER(XX, LP) = 2 THEN 60020
  1188.         IF RMONSTER(XX, LP) = 3 THEN 60030
  1189.         IF RMONSTER(XX, LP) = 4 THEN 60040
  1190.         IF RMONSTER(XX, LP) = 5 THEN 60050
  1191.         IF RMONSTER(XX, LP) = 6 THEN 60060
  1192.  
  1193.         RETURN:         REM NO MONSTER IN ROOM TO GIVE STATS TO
  1194.  
  1195. 60010   REM     DRAGON
  1196.         MDAM(XX, LP) = (5 * LP) * DUNGEON
  1197.         MHP(XX, LP) = (INT(RND(1) * 10) + 1) * LP * DUNGEON
  1198.         MAC(XX, LP) = 1
  1199.         MEXP(XX, LP) = (100 + HP) * LP
  1200.         RETURN
  1201.  
  1202. 60020   REM     ORC
  1203.         MDAM(XX, LP) = (2 * LP) * DUNGEON
  1204.         MHP(XX, LP) = (INT(RND(1) * 4) + 1) * LP * DUNGEON
  1205.         MAC(XX, LP) = 6
  1206.         MEXP(XX, LP) = (20 + HP) * LP
  1207.         RETURN
  1208.  
  1209. 60030   REM     SKELETON
  1210.         MDAM(XX, LP) = (2 * LP) * DUNGEON
  1211.         MHP(XX, LP) = (INT(RND(1) * 3) + 1) * LP * DUNGEON
  1212.         MAC(XX, LP) = 5
  1213.         MEXP(XX, LP) = (20 + HP) * LP
  1214.         RETURN
  1215.  
  1216. 60040   REM     BEAR
  1217.         MDAM(XX, LP) = (5 * LP) * DUNGEON
  1218.         MHP(XX, LP) = (INT(RND(1) * 8) + 1) * LP * DUNGEON
  1219.         MAC(XX, LP) = 8
  1220.         MEXP(XX, LP) = (30 + HP) * LP
  1221.         RETURN
  1222.  
  1223. 60050   REM     OGRE
  1224.         MDAM(XX, LP) = (3 * LP) * DUNGEON
  1225.         MHP(XX, LP) = (INT(RND(1) * 5) + 1) * LP * DUNGEON
  1226.         MAC(XX, LP) = 5
  1227.         MEXP(XX, LP) = (15 + HP) * LP
  1228.         RETURN
  1229.  
  1230. 60060   REM     HOBGOBLIN
  1231.         MDAM(XX, LP) = (3 * LP) * DUNGEON
  1232.         MHP(XX, LP) = (INT(RND(1) * 6) + 1) * LP * DUNGEON
  1233.         MAC(XX, LP) = 4
  1234.         MEXP(XX, LP) = (25 + HP) * LP
  1235.         RETURN
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241. 100000  REM     ASSIGN WEAPON & ITEMS
  1242.         WP$(1) = "LONG SWORD     (DAMAGE = 2-12)": WPC(1) = 100
  1243.         WP$(2) = "SHORT SWORD    (DAMAGE = 2-8)": WPC(2) = 60
  1244.         WP$(3) = "MACE           (DAMAGE = 2-8)": WPC(3) = 60
  1245.         WP$(4) = "DAGGER         (DAMAGE = 1-4)": WPC(4) = 20
  1246.  
  1247.  
  1248.         IT$(1) = "TORCH": IPC(1) = 10
  1249.         
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.         ARM$(1) = "PLATE MAIL    (BASE ARMOR CLASS = 2)": ARMC(1) = 250
  1260.         ARM$(2) = "CHAIN MAIL    (BASE ARMOR CLASS = 4)": ARMC(2) = 125
  1261.         ARM$(3) = "LEATHER       (BASE ARMOR CLASS = 6)": ARMC(3) = 65
  1262.  
  1263.         ARM$(9) = "MAGICAL       (ARMOR CLASS = 1)"
  1264.  
  1265.  
  1266.  
  1267.         SPELL$(1) = "FIREBALL"
  1268.         SPELLDESC$(1) = "(2 SPELL UNITS) GENERATES 3 FIREBALLS THAT DO 1-4(PER LVL) DAMAGE EA"
  1269.         SPELL$(2) = "MAGIC SHIELD"
  1270.         SPELLDESC$(2) = "(1 SPELL UNIT) CREATES 4x8 MAGICAL SHIELD.  WHEN HIT IT DISAPPEARS"
  1271.         SPELL$(3) = "HEAL SELF"
  1272.         SPELLDESC$(3) = "(3 SPELL UNITS) REGENERATES HIT POINTS BACK TO 100%"
  1273.         SPELL$(4) = "KILL OPPONENT"
  1274.         SPELLDESC$(4) = "(3 SPELL UNITS) WILL ATTEMPT TO KILL YOUR OPPONENT (1-10 HP/LVL)"
  1275.         SPELL$(5) = "REVERSE ATTACK"
  1276.         SPELLDESC$(5) = "(2 SPELL UNITS) WILL CAUSE DAMAGE TO OPPONENT = TO HIS LAST ATTACK."
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.          RETURN
  1285.  
  1286.  
  1287.  
  1288.  
  1289. 110000  REM     ***     CALCULATE CHARACTER ATTRIBUTES          ***
  1290.         REM HP,SPELLS AND AC
  1291.  
  1292.         IF AGE < 35 THEN STR = STR + 1: WIS = WIS - 1
  1293.         IF AGE < 25 THEN STR = STR + 1: WIS = WIS - 1
  1294.         IF SEX$ = "MALE" THEN STR = STR + 1: WIS = WIS - 1
  1295.         IF SEX$ = "FEMALE" THEN STR = STR - 1: WIS = WIS + 1
  1296.         IF AGE > 25 THEN WIS = WIS + 1
  1297.         IF AGE > 35 THEN WIS = WIS + 1
  1298.         IF AGE > 55 THEN WIS = WIS + 1
  1299.         IF STR > 18 THEN STR = 18
  1300.         IF WIS > 18 THEN WIS = 18
  1301.         IF WIS = 18 THEN SP = 3
  1302.         IF WIS > 10 AND WIS < 18 THEN SP = 2
  1303.         IF WIS < 11 THEN SP = 1
  1304.         IF WIS < 8 THEN SP = 0
  1305.  
  1306.         
  1307.  
  1308.  
  1309.  
  1310. 110001  X = INT(RND(1) * 5) + 1: Y = INT(RND(1) * 5) + 1: Z = INT(RND(1) * 5) + 1
  1311.         IF X = Y THEN GOTO 110001
  1312.         IF X = Z THEN GOTO 110001
  1313.         IF Y = Z THEN GOTO 110001
  1314.  
  1315.  
  1316. 110002  IF SP = 1 THEN SP1 = X: SP2 = 0: SP3 = 0
  1317.         IF SP = 2 THEN SP1 = X: SP2 = Y: SP3 = 0
  1318.         IF SP = 3 THEN SP1 = X: SP2 = Y: SP3 = Z
  1319.         IF SP = 0 THEN SP1 = 0: SP2 = 0: SP3 = 0
  1320.  
  1321.  
  1322.  
  1323.         HP = INT(RND(1) * 10) + 1
  1324.         HP = HP * LVL
  1325.         IF STR > 15 THEN HP = HP + (STR - 10)
  1326.         
  1327.         IF DEX < 12 THEN AC = AC + 1
  1328.         IF STR = 18 THEN AC = AC - 1
  1329.         IF DEX = 18 THEN AC = AC - 1
  1330.         IF AC < 1 THEN AC = 1
  1331.  
  1332.  
  1333.         RETURN
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342. 120000  REM     ***     PRINT ON SCREEN CHARACTER ATTRIBUTES    ***
  1343.        
  1344.         IF HPC = 0 THEN HPC = HP
  1345.         COLOR 7, 4
  1346.         CLS
  1347.         PRINT TAB(12); : COLOR 1, 10
  1348.         PRINT "========================================================"
  1349.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1350.         PRINT "CHARACTER NAME:"; TAB(32); N$; TAB(68);
  1351.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1352.         PRINT "AGE:"; TAB(32); AGE; TAB(68);
  1353.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1354.         PRINT "SEX:"; TAB(32); SEX$; TAB(68);
  1355.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1356.         PRINT ; TAB(68);
  1357.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1358.         PRINT "STRENGTH:"; TAB(32); STR;
  1359.         IF STR = 18 THEN PRINT "  WEAPON DOES DOUBLE DAMAGE";
  1360.         PRINT TAB(68);
  1361.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1362.         PRINT "WISDOM:"; TAB(32); WIS; TAB(68);
  1363.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1364.         PRINT "DEXTERITY:"; TAB(32); DEX; TAB(68);
  1365.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1366.         PRINT ; TAB(68);
  1367.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1368.         IF SP >= 1 THEN PRINT "SPELL #1:"; TAB(32); SPELL$(SP1); TAB(68);
  1369.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1370.         IF SP >= 2 THEN PRINT "SPELL #2:"; TAB(32); SPELL$(SP2); TAB(68);
  1371.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1372.         IF SP >= 3 THEN PRINT "SPELL #3:"; TAB(32); SPELL$(SP3); TAB(68);
  1373.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1374.         PRINT ; TAB(68);
  1375.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1376.         PRINT "WEAPON:"; TAB(32);
  1377.         IF MWP > 0 THEN PRINT "+";
  1378.         IF MWP <> 0 THEN PRINT MWP; " ";
  1379.         PRINT WP$(WP); TAB(68);
  1380.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1381.         PRINT "ARMOR WORN:"; TAB(32); ARM$(ARM); TAB(68);
  1382.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1383.         PRINT "GOLD PIECES:"; TAB(32); GP; TAB(68);
  1384.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1385.         PRINT ; TAB(68);
  1386.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1387.         PRINT "LEVEL OF EXP:"; TAB(32); LVL; "    EXP. ("; PEXP; ")"; TAB(68);
  1388.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1389.         PRINT "ARMOR CLASS:"; TAB(32); AC; TAB(68);
  1390.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1391.         PRINT "HIT POINTS:"; TAB(32); HP; " / "; HPC; TAB(68);
  1392.         COLOR 2, 4: PRINT TAB(12); : COLOR 1, 10
  1393.         PRINT "========================================================"
  1394.         COLOR 2, 4
  1395.         RETURN
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407. 130000  REM     SET UP ENTERED CHARACTER AS MEMORY CHARACTER
  1408.         ZN$ = N$
  1409.         ZAGE = AGE
  1410.         ZSEX$ = SEX$
  1411.         ZSTR = STR
  1412.         ZWIS = WIS
  1413.         ZDEX = DEX
  1414.         ZSP = SP
  1415.         ZSP1 = SP1
  1416.         ZSP2 = SP2
  1417.         ZSP3 = SP3
  1418.         ZWP = WP
  1419.         ZARM = ARM
  1420.         ZGP = GP
  1421.         ZLVL = LVL
  1422.         ZAC = AC
  1423.         ZHP = HP
  1424.         ZPEXP = PEXP
  1425.         RETURN
  1426.  
  1427.  
  1428. 200000  REM CREATE CHARACTER TOP OF SCREEN IMPRINT
  1429.         COLOR 3, 5
  1430.         
  1431.         PRINT TAB(80); " "
  1432.         PRINT TAB(23); "C R E A T E      C H A R A C T E R"; TAB(80); " ";
  1433.         PRINT TAB(21); "======================================="; TAB(80); " ";
  1434.         PRINT
  1435.         PRINT
  1436.         
  1437.         
  1438.  
  1439.  
  1440.         RETURN
  1441.  
  1442.  
  1443.  
  1444.  
  1445. 300000  REM     CHARACTER IMPRINT AT TOP OF SCREEN
  1446.         COLOR 3, 5
  1447.         PRINT TAB(5); : COLOR 10, 5: PRINT N$;
  1448.         COLOR 3, 5
  1449.         PRINT TAB(30);
  1450.         COLOR 10, 5: PRINT "SPELL UNITS = ";
  1451.         COLOR 3, 5: PRINT SPELLS; TAB(65);
  1452.         COLOR 10, 5: PRINT "LEVEL ";
  1453.         COLOR 3, 5: PRINT LVL; TAB(80); " "
  1454.         PRINT TAB(30); "<1> "; SPELL$(SP1); TAB(65);
  1455.         COLOR 10, 5: PRINT "GOLD ";
  1456.         COLOR 3, 5: PRINT GP; TAB(80); " "
  1457.         PRINT TAB(5);
  1458.         COLOR 10, 5: PRINT "WEAPON:";
  1459.         COLOR 3, 5
  1460.         IF MWP > 0 THEN PRINT "+";
  1461.         IF MWP <> 0 THEN PRINT MWP;
  1462.         PRINT LEFT$(WP$(WP), 12); TAB(30); "<2> "; SPELL$(SP2);
  1463.         COLOR 10, 5: PRINT TAB(65); "A.C. ";
  1464.         COLOR 3, 5: PRINT AC; TAB(80); " "
  1465.         COLOR 10, 5: PRINT TAB(5); "ARMOR  :";
  1466.         COLOR 3, 5: PRINT LEFT$(ARM$(ARM), 14); TAB(30); "<3> "; SPELL$(SP3); TAB(65);
  1467.         COLOR 10, 5: PRINT "H.P. ";
  1468.         COLOR 3, 5: PRINT HP; "/"; HPC; TAB(80); " "
  1469.         
  1470.         RETURN
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476. 400000  GOSUB 50000
  1477.        
  1478.         IF O$ = "N" OR O$ = "NORTH" OR O$ = "GO NORTH" THEN IF N(RM, DL) <> 0 THEN RM = N(RM, DL): RETURN
  1479.         IF O$ = "N" OR O$ = "NORTH" OR O$ = "GO NORTH" THEN R$ = "YOU WALK INTO A WALL!": RETURN
  1480.         IF O$ = "S" OR O$ = "SOUTH" OR O$ = "GO SOUTH" THEN IF S(RM, DL) <> 0 THEN RM = S(RM, DL): RETURN
  1481.         IF O$ = "S" OR O$ = "SOUTH" OR O$ = "GO SOUTH" THEN R$ = "YOU WALK INTO A WALL!": RETURN
  1482.         IF O$ = "E" OR O$ = "EAST" OR O$ = "GO EAST" THEN IF E(RM, DL) <> 0 THEN RM = E(RM, DL): RETURN
  1483.         IF O$ = "E" OR O$ = "EAST" OR O$ = "GO EAST" THEN R$ = "YOU WALK INTO A WALL!": RETURN
  1484.         IF O$ = "W" OR O$ = "WEST" OR O$ = "GO WEST" THEN IF W(RM, DL) <> 0 THEN RM = W(RM, DL): RETURN
  1485.         IF O$ = "W" OR O$ = "WEST" OR O$ = "GO WEST" THEN R$ = "YOU WALK INTO A WALL!": RETURN
  1486.  
  1487.  
  1488.         IF O$ = "UP" OR O$ = "GO UP" OR O$ = "U" OR O$ = "GO UP STAIRS" THEN IF STEPS(RM, DL) = 1 THEN IF DL <> 1 THEN DL = DL - 1: RM = STEPSONLEVEL(DL): RETURN
  1489.         IF O$ = "UP" OR O$ = "GO UP" OR O$ = "U" OR O$ = "GO UP STAIRS" THEN R$ = "THERE ARE NO STAIRS THAT GO UP IN THIS ROOM.": RETURN
  1490.         IF O$ = "DOWN" OR O$ = "GO DOWN" OR O$ = "D" OR O$ = "GO DOWN STAIRS" THEN IF STEPS(RM, DL) = 1 THEN IF DL <> 10 THEN DL = DL + 1: RM = STEPSONLEVEL(DL): RETURN
  1491.         IF O$ = "DOWN" OR O$ = "GO DOWN" OR O$ = "D" OR O$ = "GO DOWN STAIRS" THEN R$ = "THERE ARE NO STAIRS THAT GO DOWN IN THIS ROOM.": RETURN
  1492.  
  1493.  
  1494.         IF O$ = "HELP" THEN GOTO 450000
  1495.  
  1496.         IF LEFT$(O$, 4) = "CHAR" THEN GOSUB 120000: PRINT : PRINT "HIT <ENTER> TO CONTINUE"; : GOSUB 50000: RETURN
  1497.  
  1498.        
  1499.         IF LEFT$(O$, 12) = "MONSTER STAT" THEN GOSUB 460000: RETURN
  1500.         IF LEFT$(O$, 3) = "GET" OR LEFT$(O$, 7) = "PICK UP" THEN GOTO 960000
  1501.  
  1502.        
  1503.         IF LEFT$(O$, 4) = "KILL" OR LEFT$(O$, 6) = "ATTACK" OR LEFT$(O$, 5) = "ATTACK" THEN GOSUB 470000: RETURN
  1504.  
  1505.        
  1506.         IF O$ = "LIST SPELLS" THEN GOTO 975000
  1507.  
  1508.  
  1509.         IF LEFT$(O$, 4) = "LOOK" THEN GOTO 900000
  1510.        
  1511.              
  1512.         IF LEFT$(O$, 3) = "SAY" OR LEFT$(O$, 4) = "YELL" THEN R$ = "THE WORDS " + RIGHT$(O$, (LEN(O$) - 4)) + " ECHO THRU THE DUNGEON.": RETURN
  1513.  
  1514.         IF LEFT$(O$, 4) = "OPEN" OR LEFT$(O$, 6) = "UNLOCK" THEN GOTO 950000
  1515.  
  1516.  
  1517.  
  1518.         IF LEFT$(O$, 8) = "FUCK YOU" THEN R$ = "FUCK YOU!  NOW YOU HAVE ONE HIT POINT! HA HA HA HA!!!!": HP = 1: RETURN
  1519.          
  1520.         IF LEFT$(O$, 8) = "FUCK" THEN R$ = "YOU AND THE WALL START FUCKING - YOU ARE SILLY!!!": RETURN
  1521.  
  1522.        
  1523.         IF LEFT$(O$, 5) = "DRINK" THEN GOSUB 410000: RETURN
  1524.        
  1525.  
  1526.         IF LEFT$(O$, 5) = "SPELL" OR LEFT$(O$, 10) = "CAST SPELL" THEN GOSUB 420000: RETURN
  1527.  
  1528.         IF LEFT$(O$, 9) = "GIVE GOLD" THEN GOSUB 990000: RETURN
  1529.  
  1530.         IF O$ = "READ WRITING" OR O$ = "READ WRITING ON WALL" OR O$ = "READ WALL" OR O$ = "READ WALLS" THEN GOTO 900014
  1531.        
  1532.        REM ********** PROGRAMMERS CHEAT         ****************
  1533.        
  1534.        
  1535.        
  1536.        
  1537.        
  1538.        
  1539.        
  1540.        
  1541.         IF LEFT$(O$, 4) = "ROOM" THEN RM = VAL(RIGHT$(O$, 2)): RETURN
  1542.        
  1543.        
  1544.  
  1545.  
  1546.  
  1547.         REM     ****************************************************
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.         R$ = "I CAN'T UNDERSTAND WHAT YOU WANT TO DO - TYPE 'HELP' FOR LIST OF COMMANDS."
  1555.  
  1556.        
  1557.        
  1558.        
  1559.        
  1560.        
  1561.         
  1562.         RETURN
  1563. 410000  REM     DRINK SOMETHING
  1564.  
  1565.         REM     IF IT ISN'T A POTION, YOU CANT DRINK IT!
  1566.  
  1567.         IF RIGHT$(O$, 6) = "POTION" THEN GOTO 410001
  1568.  
  1569.         AAA = LEN(O$) - 5: IF AAA <= 1 THEN AAA = 1
  1570.  
  1571.  
  1572.  
  1573.         R$ = "YOU CAN'T DRINK ' " + RIGHT$(O$, AAA) + " '!": RETURN
  1574.         
  1575.  
  1576.  
  1577.  
  1578. 410001  REM     IS THERE A POTION IN THE ROOM TO DRINK?
  1579.  
  1580.         IF RITEM(RM, DL) <> 1 THEN R$ = "THERE IS NO POTION IN THIS ROOM TO DRINK.": RETURN
  1581.  
  1582.  
  1583.         REM     DETERMINE WHAT THE POTION DOES
  1584.  
  1585.         WH = INT(RND(1) * 4) + 1: REM ONLY TWO OPTIONS FOR NOW
  1586.         DF = INT(RND(1) * 10) + 1: DF = DF * DL
  1587.         RITEM(RM, DL) = 6: REM NO MORE ITEM IN ROOM
  1588.         IF WH > 1 THEN HP = HP + DF:  R$ = "THE POTION INCREASED YOUR HIT POINTS BY " + STR$(DF) + "!": GOTO 410002
  1589.         HP = HP - DF: R$ = "THE POTION WAS POISON!  YOU LOST " + STR$(DF) + " HIT POINTS AFTER DRINKING IT!"
  1590.         IF HP < 1 THEN OVER = 1
  1591.         RETURN
  1592.  
  1593.  
  1594.         
  1595.  
  1596. 420000  REM     WANT TO CAST A SPELL
  1597.        
  1598.         REM     DO YOU HAVE ANY SPELLS LEFT
  1599.         IF SPELLS = 0 THEN R$ = "YOU HAVE NO SPELLS LEFT !": RETURN
  1600.  
  1601.         REM     WHICH SPELL TO USE?
  1602.         
  1603.         PRINT "ENTER SPELL TO CAST ";
  1604.         GOSUB 50000
  1605.        
  1606.         
  1607.         REM WHAT SPELL IS IT
  1608.  
  1609.         IF LEFT$(O$, 8) = "FIREBALL" THEN GOTO 420100: REM FIREBALL
  1610.         IF LEFT$(O$, 12) = "MAGIC SHIELD" THEN GOTO 420200: REM MAGIC SHIELD
  1611.         IF LEFT$(O$, 9) = "HEAL SELF" THEN GOTO 420300: REM HEAL SELF
  1612.         IF LEFT$(O$, 13) = "KILL OPPONENT" THEN GOTO 420400: REM KILL OPPONENT
  1613.         IF LEFT$(O$, 14) = "REVERSE ATTACK" THEN GOTO 420500: REM REVERSE ATTACK
  1614.         IF O$ = "EXIT" THEN RETURN
  1615.        
  1616.         PRINT "THAT IS NOT A SPELL.  TRY AGAIN OR 'EXIT' TO NOT CAST A SPELL."
  1617.         GOTO 420000
  1618.         
  1619. 420050  REM CHECK IF PLAYER HAS SPELL
  1620.         IF O$ <> SPELL$(SP1) AND O$ <> SPELL$(SP2) AND O$ <> SPELL$(SP3) THEN GOTO 420055
  1621.         
  1622.         RETURN
  1623.  
  1624. 420055  R$ = "YOU DON'T HAVE THAT SPELL!": NSP = 1: RETURN
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632. 420100  REM     FIREBALL SPELL
  1633.         GOSUB 420050: REM DOES HE HAVE THIS SPELL AVAILABLE
  1634.        
  1635.         IF NSP = 1 THEN NSP = 0: RETURN
  1636.        
  1637.         IF SPELLS < 2 THEN R$ = "YOU DON'T HAVE ENOUGH SPELL UNITS AVAILABLE TO CAST THAT SPELL.": RETURN
  1638.  
  1639.         SPELLS = SPELLS - 2
  1640.         SPAT = 1: REM TURN SPELL ATTACK TOGGLE ON
  1641.         GOSUB 470000: REM IS THERE A MONSTER IN THE ROOM
  1642.         SPAT = 0: REM TURN SPELL ATTACK TOGGLE OFF
  1643.         IF ZZZ = 1 THEN ZZZ = 0: SPELLS = SPELLS + 2: RETURN: REM NO MONSTER IN ROOM
  1644.  
  1645.         REM     DETERMIN DAMAGE TO MONSTER
  1646.         D1 = INT(RND(1) * 4) + 1: D1 = D1 * LVL: REM FIREBALL#1
  1647.         D2 = INT(RND(1) * 4) + 1: D2 = D2 * LVL: REM FIREBALL#2
  1648.         D3 = INT(RND(1) * 4) + 1: D3 = D3 * LVL: REM FIREBALL#3
  1649.  
  1650.         DD = D1 + D2 + D3: REM DAMAGE DONE TO MONSTER
  1651.         R$ = "YOU CAST THE " + SPELL$(1) + " SPELL AND USED UP 2 SPELL UNITS."
  1652.         
  1653.         F1$ = "THE 3 FIREBALLS DID " + STR$(DD) + " HIT POINTS TOTAL DAMAGE TO THE " + MONSTER$(RMONSTER(RM, DL)) + "."
  1654.  
  1655.  
  1656.  
  1657.         REM     DEDUCT DAMAGE FROM MONSTER
  1658.       
  1659.         MHP(RM, DL) = MHP(RM, DL) - DD
  1660.         IF MHP(RM, DL) < 1 THEN GOSUB 471010: REM MONSTER IS DEAD
  1661.  
  1662.  
  1663.         GOSUB 475000: REM MONSTER ATTACKS PLAYER
  1664.  
  1665.         RETURN
  1666.  
  1667. 420200  REM     MAGIC SHIELD SPELL
  1668.         GOSUB 420050: REM DOES HE HAVE THIS SPELL AVAILABLE
  1669.         IF NSP = 1 THEN NSP = 0: RETURN
  1670.         IF SPELLS < 1 THEN R$ = "YOU DON'T HAVE ENOUGH SPELL UNITS AVAILABLE TO CAST THAT SPELL.": RETURN
  1671.         SPELLS = SPELLS - 1
  1672.         R$ = "YOU CAST THE " + SPELL$(2) + " SPELL AND USED UP ONE SPELL UNIT."
  1673.         F1$ = "YOUR MAGIC SHIELD IS UP.  IT WILL DISSAPEAR WHEN HIT."
  1674.         SHD = 1
  1675.         RETURN
  1676.  
  1677.  
  1678.  
  1679. 420300  REM     HEAL SELF SPELL
  1680.        
  1681.         GOSUB 420050: REM DOES HE HAVE THIS SPELL AVAILABLE
  1682.         IF NSP = 1 THEN NSP = 0: RETURN
  1683.         IF SPELLS < 3 THEN R$ = "YOU DON'T HAVE ENOUGH SPELL UNITS AVAILABLE TO CAST THAT SPELL.": RETURN
  1684.         SPELLS = SPELLS - 3
  1685.         R$ = "YOU CAST THE " + SPELL$(3) + " SPELL AND USED UP 3 SPELL UNITS."
  1686.         F1$ = "YOUR HIT POINTS HAVE BEEN RESTORED TO 100%!"
  1687.         HP = HPC
  1688.  
  1689.         RETURN
  1690.  
  1691.  
  1692. 420400  REM     KILL OPPONENT SPELL
  1693.         GOSUB 420050: REM DOES HE HAVE THIS SPELL AVAILABLE
  1694.         IF NSP = 1 THEN NSP = 0: RETURN
  1695.         IF SPELLS < 3 THEN R$ = "YOU DON'T HAVE ENOUGH SPELL UNITS AVAILABLE TO CAST THAT SPELL.": RETURN
  1696.         SPELLS = SPELLS - 3
  1697.         R$ = "YOU CAST THE " + SPELL$(4) + " SPELL AND USED UP 3 SPELL UNITS."
  1698.         SPAT = 1: REM TURN SPELL ATTACK TOGGLE ON
  1699.         GOSUB 470000: REM IS THERE A MONSTER IN THE ROOM
  1700.         SPAT = 0: REM TURN SPELL ATTACK TOGGLE OFF
  1701.         IF ZZZ = 1 THEN ZZZ = 0: SPELLS = SPELLS + 3: RETURN: REM NO MONSTER IN ROOM
  1702.  
  1703.         REM     DETERMIN DAMAGE TO MONSTER
  1704.         DD = INT(RND(1) * 10) + 1: DD = DD * LVL
  1705.  
  1706.         
  1707.         
  1708.        
  1709.         F1$ = "THE SPELL " + STR$(DD) + " HIT POINTS TOTAL DAMAGE TO THE " + MONSTER$(RMONSTER(RM, DL)) + "."
  1710.  
  1711.  
  1712.  
  1713.         REM     DEDUCT DAMAGE FROM MONSTER
  1714.      
  1715.         MHP(RM, DL) = MHP(RM, DL) - DD
  1716.         IF MHP(RM, DL) < 1 THEN GOSUB 471010: REM MONSTER IS DEAD
  1717.  
  1718.  
  1719.         GOSUB 475000: REM MONSTER ATTACKS PLAYER
  1720.  
  1721.         RETURN
  1722.  
  1723.  
  1724.  
  1725. 420500  REM     REVERSE ATTACK SPELL
  1726.         GOSUB 420050: REM DOES HE HAVE THIS SPELL AVAILABLE
  1727.         IF NSP = 1 THEN NSP = 0: RETURN
  1728.         IF SPELLS < 2 THEN R$ = "YOU DON'T HAVE ENOUGH SPELL UNITS AVAILABLE TO CAST THAT SPELL.": RETURN
  1729.         SPELLS = SPELLS - 2
  1730.         REM MOND = DD = LAST TIME MONSTER DID DAMAGE
  1731.  
  1732.  
  1733.         SPAT = 1: REM TURN SPELL ATTACK TOGGLE ON
  1734.         GOSUB 470000: REM IS THERE A MONSTER IN THE ROOM
  1735.         SPAT = 0: REM TURN SPELL ATTACK TOGGLE OFF
  1736.         IF ZZZ = 1 THEN ZZZ = 0: SPELLS = SPELLS + 2: RETURN: REM NO MONSTER IN ROOM
  1737.  
  1738.         
  1739.  
  1740.        
  1741.         R$ = "YOU CAST THE " + SPELL$(5) + " SPELL AND USED UP 2 SPELL UNITS."
  1742.       
  1743.         
  1744.  
  1745.  
  1746.  
  1747.         REM     DEDUCT DAMAGE FROM MONSTER
  1748.         DD = MOND: MOND = 0
  1749.         F1$ = "THE SPELL DID " + STR$(DD) + " HIT POINTS TOTAL DAMAGE TO THE " + MONSTER$(RMONSTER(RM, DL)) + "."
  1750.         MHP(RM, DL) = MHP(RM, DL) - DD
  1751.         IF MHP(RM, DL) < 1 THEN GOSUB 471010: REM MONSTER IS DEAD
  1752.  
  1753.  
  1754.         GOSUB 475000: REM MONSTER ATTACKS PLAYER
  1755.  
  1756.         RETURN
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766. 410002  IF HP > HPC THEN HP = HPC: R$ = "THE POTION RESTORED YOU HIT POINTS TO 100%!"
  1767.         RETURN
  1768.  
  1769.         
  1770.  
  1771.  
  1772.  
  1773.  
  1774. 450000  REM      PRINT LIST OF COMMANDS
  1775.         CLS
  1776.         COLOR 2, 0
  1777.         PRINT
  1778.         PRINT "N, NORTH, S, SOUTH, W, WEST, E, EAST, U, UP, D, DOWN"
  1779.         PRINT
  1780.         PRINT "FIGHT, ATTACK, KILL, SPELL, CAST SPELL "
  1781.         PRINT
  1782.         PRINT "LOOK, LOOK AT, GET, PICK UP, OPEN, DRINK"
  1783.         PRINT
  1784.         PRINT "CHAR      TO SEE COMPLETE CHARACTER SHEET ON YOURSELF"
  1785.         PRINT
  1786.         PRINT "MONSTER STATS        TO SEE STATS ON MONSTER IN THE ROOM"
  1787.         PRINT
  1788.         PRINT "LIST SPELLS              TO SEE SPELL DESCRIPTIONS"
  1789.         PRINT
  1790.         PRINT
  1791.         PRINT "THERE ARE ALSO SOME SECRET THINGS YOU CAN DO!"
  1792.  
  1793.         PRINT
  1794.         PRINT
  1795.  
  1796.  
  1797.         PRINT
  1798.         PRINT "HIT <ENTER> TO CONTINUE"
  1799.         GOSUB 50000
  1800.  
  1801.         
  1802.         GOTO 1005
  1803.  
  1804.  
  1805.  
  1806.  
  1807.  
  1808.         REM     ***     MONSTER STATS   ***
  1809.  
  1810. 460000  REM     FIRST CHECK TO SEE IF MONSTER IS IN THE ROOM
  1811.         IF RMONSTER(RM, DL) < 7 THEN GOTO 460001
  1812.         R$ = "THERE IS NO MONSTER IN THIS ROOM."
  1813.         RETURN
  1814.  
  1815.  
  1816.  
  1817.  
  1818. 460001  REM     NOW CHECK TO SEE IF HE IS ALIVE
  1819.         IF ALIVE(RM, DL) = 1 THEN GOTO 460002
  1820.         R$ = "HE IS AS DEAD AS A STUMP.  HE HAS NO STATS ANYMORE !!!"
  1821.         RETURN
  1822.  
  1823. 460002  IF ALIVE(RM, DL) < 1 THEN M$ = "": RETURN
  1824.  
  1825.  
  1826.         REM     HE IS ALIVE, NOW PRINT HIS STATS
  1827.         M$ = MONSTER$(RMONSTER(RM, DL))
  1828.         M$ = M$ + "     DAM: = (1 -"
  1829.         M$ = M$ + STR$(MDAM(RM, DL))
  1830.         M$ = M$ + ")"
  1831.         M$ = M$ + "     H.P. ="
  1832.         M$ = M$ + STR$(MHP(RM, DL))
  1833.         M$ = M$ + "     A.C. "
  1834.         M$ = M$ + STR$(MAC(RM, DL))
  1835.         M$ = M$ + "     EXP. PTS. ="
  1836.         M$ = M$ + STR$(MEXP(RM, DL))
  1837.         RETURN
  1838.  
  1839.     
  1840.  
  1841.  
  1842. 470000  REM     PLAYER WANTS TO FIGHT MONSTER
  1843.  
  1844.         REM     IS THERE A MONSTER IN THE ROOM?
  1845.         IF RMONSTER(RM, DL) < 7 THEN GOTO 470001
  1846.         ZZZ = 1: R$ = "THERE IS NOTHING TO ATTACK IN THIS ROOM."
  1847.         RETURN
  1848.  
  1849. 470001  REM     THERE IS A MONSTER - IS IT ALIVE
  1850.  
  1851.         IF ALIVE(RM, DL) = 1 THEN GOTO 470002
  1852.         ZZZ = 1: R$ = "THE " + MONSTER$(RMONSTER(RM, DL)) + " IS ALREADY DEAD!"
  1853.         RETURN
  1854.  
  1855.  
  1856. 470002  REM     MONSTER IS ALIVE
  1857.  
  1858.         REM     1ST GOTO PLAYER ATTACK MONSTER SUBROUTINE
  1859.         REM     IS IS A SPELL ATTACK
  1860.         IF SPAT = 1 THEN RETURN
  1861.         GOSUB 471000
  1862.  
  1863.         IF LEFT$(F2$, 10) = "YOU GAINED" THEN RETURN
  1864.  
  1865.  
  1866.         REM     NEXT GOTO MONSTER ATTACK PLAYER SUBROUTINE
  1867.                 GOSUB 475000
  1868.  
  1869.         RETURN
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875. 471000  REM     PLAYER ATTACKS MONSTER
  1876.         
  1877.         
  1878.         
  1879.         REM     CALCULATE MONSTERS 'TO HIT' NUMBER
  1880.         IF MAC(RM, DL) = 1 THEN MTOHIT = 17
  1881.         IF MAC(RM, DL) = 2 THEN MTOHIT = 16
  1882.         IF MAC(RM, DL) = 3 THEN MTOHIT = 15
  1883.         IF MAC(RM, DL) = 4 THEN MTOHIT = 14
  1884.         IF MAC(RM, DL) = 5 THEN MTOHIT = 13
  1885.         IF MAC(RM, DL) = 6 THEN MTOHIT = 12
  1886.         IF MAC(RM, DL) = 7 THEN MTOHIT = 11
  1887.         IF MAC(RM, DL) > 7 THEN MTOHIT = 10
  1888.  
  1889.         IF STR >= 17 THEN MTOHIT = MTOHIT - 1
  1890.         IF STR = 18 THEN MTOHIT = MTOHIT - 1
  1891.         IF DEX = 18 THEN MTOHIT = MTOHIT - 1
  1892.  
  1893.  
  1894.  
  1895. 471001  REM     DID PLAYER HIT MONSTER.
  1896.  
  1897.         ROLL = INT(RND(1) * 20) + 1: REM ROLL DICE
  1898.  
  1899.         IF ROLL >= MTOHIT THEN GOTO 471005: REM HIT MONSTER
  1900.         F1$ = "YOUR ATTACK DID NO DAMAGE TO THE " + MONSTER$(RMONSTER(RM, DL)) + "."
  1901.         RETURN
  1902.  
  1903.  
  1904.  
  1905. 471005  REM     PLAYER HIT MONSTER - HOW MUCH DAMAGE WAS DONE?
  1906.  
  1907.         IF WP = 1 THEN DD = (INT(RND(1) * 6) + 1) * 2
  1908.         IF WP = 2 OR WP = 3 THEN DD = (INT(RND(1) * 4) + 1) * 2
  1909.         IF WP = 4 THEN DD = (INT(RND(1) * 4) + 1)
  1910.  
  1911.  
  1912.         REM     DOES HE DO DOUBLE DAMAGE
  1913.         IF STR = 18 THEN DD = DD * 2
  1914.  
  1915.         REM     IS IT A MAGICAL WEAPON
  1916.  
  1917.         DD = DD + MWP:  IF DD < 0 THEN DD = 0
  1918.         
  1919.        
  1920.         REM     DEDUCT DAMAGE FROM MONSTER
  1921.        
  1922.         MHP(RM, DL) = MHP(RM, DL) - DD
  1923.         IF MHP(RM, DL) < 1 THEN GOTO 471010: REM MONSTER IS DEAD
  1924.  
  1925.         
  1926.         
  1927.  
  1928.         F1$ = "YOU ATTACKED AND DID " + STR$(DD) + " PTS OF DAMAGE TO THE " + MONSTER$(RMONSTER(RM, DL))
  1929.        
  1930.         RETURN
  1931.  
  1932.  
  1933. 471010  REM     MONSTER IS DEAD
  1934.  
  1935.         F1$ = "YOU KILLED THE " + MONSTER$(RMONSTER(RM, DL))
  1936.         ALIVE(RM, DL) = 0
  1937.  
  1938.         REM     GIVE CHARACTER EXP AND GOLD
  1939.  
  1940.         GG = INT(RND(1) * 25) + 1: GG = GG * DL
  1941.         F1$ = F1$ + " .YOU GAINED " + STR$(GG) + " G.P. AND " + STR$(MEXP(RM, DL)) + " EXP."
  1942.         PEXP = PEXP + MEXP(RM, DL)
  1943.         GP = GP + GG
  1944.  
  1945.         REM     NEED TO CHECK IF LEVEL INCREASED
  1946. 470011  FD = (LVL * 1000) + 999
  1947.         IF PEXP > FD THEN GOTO 470012
  1948.         RETURN
  1949.  
  1950.        
  1951.        
  1952. 470012  LVL = LVL + 1: F2$ = "YOU GAINED A LEVEL OF EXPERIENCE!  YOUR SPELLS & H.P. HAVE BEEN ADJUSTED."
  1953.         DW = INT(RND(1) * 10) + 1: HPC = HPC + DW: HP = HP + DW
  1954.         SPELLS = LVL
  1955.         GOTO 470011
  1956.  
  1957.         
  1958.  
  1959.  
  1960. 475000  REM     MONSTER ATTACKS PLAYER
  1961.         MOND = 0: REM CLEAR LAST MONSTER DAMAGE
  1962.         REM     WAS MONSTER KILLED?
  1963.         IF ALIVE(RM, DL) = 0 THEN F2$ = "": RETURN
  1964.  
  1965.  
  1966.        
  1967.        
  1968.         REM     CALCULATE PLAYERS 'TO HIT' NUMBER
  1969.         IF AC = 1 THEN TOHIT = 17
  1970.         IF AC = 2 THEN TOHIT = 16
  1971.         IF AC = 3 THEN TOHIT = 15
  1972.         IF AC = 4 THEN TOHIT = 14
  1973.         IF AC = 5 THEN TOHIT = 13
  1974.         IF AC = 6 THEN TOHIT = 12
  1975.         IF AC = 7 THEN TOHIT = 11
  1976.         IF AC > 7 THEN TOHIT = 10
  1977.  
  1978.         IF RMONSTER(RM, DL) = 1 THEN TOHIT = TOHIT - 2
  1979.         REM DRAGONS HIT YOU MORE THAN NORMAL
  1980.         
  1981.  
  1982.  
  1983.  
  1984. 475001  REM     DID MONSTER HIT PLAYER
  1985.  
  1986.         ROLL = INT(RND(1) * 20) + 1: REM ROLL DICE
  1987.  
  1988.         IF ROLL >= TOHIT THEN GOTO 475005: REM HIT PLAYER
  1989.         F2$ = "THE " + MONSTER$(RMONSTER(RM, DL)) + " ATTACKED YOU AND DID NO DAMAGE."
  1990.  
  1991.         RETURN
  1992.  
  1993.  
  1994.  
  1995. 475005  REM     MONSTER HIT PLAYER - HOW MUCH DAMAGE WAS DONE?
  1996.         
  1997.         REM WAS MAGIC SHIELD UP
  1998.         IF SHD = 1 THEN SHD = 0: F2$ = "THE " + MONSTER$(RMONSTER(RM, DL)) + " BROKE YOUR MAGIC SHIELD!": SHD = 0: RETURN
  1999.  
  2000.         
  2001.  
  2002.  
  2003.  
  2004.        DD = INT(RND(1) * MDAM(RM, DL)) + 1: MOND = DD
  2005.       
  2006.  
  2007.  
  2008.         
  2009.         
  2010.  
  2011.        
  2012.  
  2013.       
  2014.         REM     DEDUCT DAMAGE FROM PLAYER
  2015.       
  2016.         HP = HP - DD
  2017.         IF HP < 1 THEN GOTO 475010: REM PLAYER IS DEAD
  2018.  
  2019.         F2$ = "THE " + MONSTER$(RMONSTER(RM, DL)) + " DID " + STR$(DD) + " H.P. OF DAMAGE TO YOU!"
  2020.  
  2021.       
  2022.         RETURN
  2023.  
  2024.  
  2025. 475010  REM     PLAYER IS DEAD
  2026.  
  2027.         F2$ = "THE " + MONSTER$(RMONSTER(RM, DL)) + " KILLED YOU!!!!!!!   GAME OVER!"
  2028.         OVER = 1: RETURN
  2029.         
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036. 900000  REM     LOOK AT SOMETHING
  2037.  
  2038.         IF RIGHT$(O$, 6) = "POTION" THEN GOTO 900001
  2039.         IF RIGHT$(O$, 5) = "CHEST" THEN GOTO 900002
  2040.         IF RIGHT$(O$, 5) = "SWORD" THEN GOTO 900003
  2041.         IF RIGHT$(O$, 6) = "DRAGON" THEN GOTO 900004
  2042.         IF RIGHT$(O$, 3) = "ORC" THEN GOTO 900005
  2043.         IF RIGHT$(O$, 8) = "SKELETON" THEN GOTO 900006
  2044.         IF RIGHT$(O$, 4) = "BEAR" THEN GOTO 900007
  2045.         IF RIGHT$(O$, 4) = "OGRE" THEN GOTO 900008
  2046.         IF RIGHT$(O$, 9) = "HOBGOBLIN" THEN GOTO 900009
  2047.         IF RIGHT$(O$, 7) = "MONSTER" OR RIGHT$(O$, 8) = "CREATURE" THEN GOTO 900010
  2048.         IF RIGHT$(O$, 4) = "ROOM" THEN GOTO 900011
  2049.         IF RIGHT$(O$, 5) = "WALLS" OR RIGHT$(O$, 4) = "WALL" OR RIGHT$(O$, 7) = "CEILING" THEN GOTO 900012
  2050.         IF RIGHT$(O$, 4) = "SELF" OR RIGHT$(O$, 9) = "CHARACTER" THEN GOTO 900013
  2051.         
  2052.  
  2053.         AAAA = LEN(O$)
  2054.         AAAA = AAAA - 4: AAAA$ = RIGHT$(O$, AAAA)
  2055.         R$ = "I DON'T KNOW WHAT '" + AAAA$ + "' IS."
  2056.         RETURN
  2057.  
  2058.  
  2059.  
  2060. 900001  REM     POTION
  2061.         IF RITEM(RM, DL) <> 1 THEN R$ = "THERE IS NO POTION IN THIS ROOM.": RETURN
  2062.         R$ = "THE POTION IS CLEAR AND IN A SMALL FLASK - TRY DRINKING IT!": RETURN
  2063. 900002  REM     TREASURE CHEST
  2064.         IF RITEM(RM, DL) <> 3 THEN R$ = "THERE IS NO CHEST IN THIS ROOM.": RETURN
  2065.         IF CHESTOPEN(RM, DL) = 1 THEN R$ = "THE CHEST IS BROWN WOOD AND IS NOT LOCKED. TRY OPENING IT!": RETURN
  2066.         IF CHESTOPEN(RM, DL) = 0 THEN R$ = "THE CHEST IS BROWN WOOD, AND HAS ALREADY BEEN OPENED!": RETURN
  2067. 900003  REM     SWORD
  2068.         IF RITEM(RM, DL) <> 2 THEN R$ = "THERE IS NO SWORD IN THIS ROOM.": RETURN
  2069.         R$ = "IT IS A LONG SWORD.  IT MAY BE MAGIC, OR IT MAY BE CURSED.  YOU CAN'T TELL.": RETURN
  2070. 900004  REM     DRAGON
  2071.         IF RMONSTER(RM, DL) <> 1 THEN R$ = "THERE ISN'T A DRAGON IN THIS ROOM.": RETURN
  2072.         IF ALIVE(RM, DL) <> 1 THEN R$ = "THE DRAGON IS DEAD AND IS LYING ON THE GROUND!": RETURN
  2073.         R$ = "THE DRAGON IS HUGE.  IT'S MONSTROUS BODY IS ALMOST SCARY TO LOOK AT!": RETURN
  2074.  
  2075. 900005  REM     ORC
  2076.         IF RMONSTER(RM, DL) <> 2 THEN R$ = "THERE ISN'T AN ORC IN THIS ROOM.": RETURN
  2077.         IF ALIVE(RM, DL) <> 1 THEN R$ = "THE ORC IS DEAD, ON THE GROUND IN A POOL OF BLOOD!": RETURN
  2078.  
  2079.         R$ = "THE ORC IS ARMED WITH A STANGE LOOKING SWORD AND READY TO ATTACK!": RETURN
  2080.  
  2081. 900006 REM     SKELETON
  2082.         IF RMONSTER(RM, DL) <> 3 THEN R$ = "THERE ISN'T A SKELETON IN THIS ROOM.": RETURN
  2083.         IF ALIVE(RM, DL) <> 1 THEN R$ = "THE SKELETON IS SIMPLY A PILE OF BONES!": RETURN
  2084.  
  2085.         R$ = "THE SKELETON IS ARMED WITH A HUGE SWORD AND READY TO ATTACK!": RETURN
  2086.  
  2087. 900007  REM     BEAR
  2088.         IF RMONSTER(RM, DL) <> 4 THEN R$ = "THERE ISN'T A BEAR IN THIS ROOM.": RETURN
  2089.         IF ALIVE(RM, DL) <> 1 THEN R$ = "THE BEAR IS DEAD, ON THE GROUND IN A POOL OF BLOOD!": RETURN
  2090.  
  2091.         R$ = "THE BEAR IS ROARING FIERCELY, AND SEEMS TO HAVE A GRUDGE AGAINST YOU!": RETURN
  2092.  
  2093. 900008  REM     OGRE
  2094.         IF RMONSTER(RM, DL) <> 5 THEN R$ = "THERE ISN'T AN OGRE IN THIS ROOM.": RETURN
  2095.         IF ALIVE(RM, DL) <> 1 THEN R$ = "THE OGRE IS DEAD ON THE GROUND,RESEMBLING A PILE OF PUKE!": RETURN
  2096.  
  2097.         R$ = "THE OGRE IS ARMED WITH A STANGE LOOKING SWORD AND READY TO ATTACK!": RETURN
  2098.  
  2099. 900009  REM     HOBGOBLIN
  2100.         IF RMONSTER(RM, DL) <> 6 THEN R$ = "THERE ISN'T A HOBGOBLIN IN THIS ROOM.": RETURN
  2101.         IF ALIVE(RM, DL) <> 1 THEN R$ = "THE HOBGOBLIN IS DEAD, ON THE GROUND!": RETURN
  2102.  
  2103.         R$ = "THE HOBGOBLIN IS ARMED AND READY TO ATTACK!": RETURN
  2104.  
  2105. 900010  REM     MONSTER OR CREATURE
  2106.  
  2107.         IF RMONSTER(RM, DL) = 1 THEN GOTO 900004
  2108.         IF RMONSTER(RM, DL) = 2 THEN GOTO 900005
  2109.         IF RMONSTER(RM, DL) = 3 THEN GOTO 900006
  2110.         IF RMONSTER(RM, DL) = 4 THEN GOTO 900007
  2111.         IF RMONSTER(RM, DL) = 5 THEN GOTO 900008
  2112.         IF RMONSTER(RM, DL) = 6 THEN GOTO 900009
  2113.         R$ = "THERE ARE NO MONSTERS IN THIS ROOM.": RETURN
  2114.  
  2115. 900011  REM     ROOM
  2116.         R$ = "READ THE ROOM DESCRIPTION.": RETURN
  2117.  
  2118. 900012  REM     WALLS WALL CEILING
  2119.         R$ = "THE WALLS AND CEILING ARE GREY CONCRETE & STONE."
  2120.         F1$ = "THERE IS SOMETHING WRITTEN ON ONE OF THE WALLS.": RETURN
  2121.  
  2122. 900013  REM     MYSELF CHARACTER
  2123.         R$ = "YOU ARE ABOUT THE UGLIEST THING TO WALK THE EARTH!": RETURN
  2124.  
  2125.  
  2126. 900014  REM      READ WRITING ON WALL
  2127.         
  2128.         IF RM = DL THEN R$ = "THE ENSCRIPTION READS 'GIVE IT GOLD WHEN IT IS DEAD'.": RETURN
  2129.         IF RM = 1 THEN R$ = "IT SAYS   '120+HP1000+GP12+LVL'": RETURN
  2130.         R$ = "IT SAYS 'READ ALL OF THE WALLS & FIND SOME SECRETS !!!'": RETURN
  2131.  
  2132.  
  2133.  
  2134. 950000  REM OPEN OR UNLOCK SOMETHING
  2135.  
  2136.         IF RIGHT$(O$, 5) = "CHEST" OR RIGHT$(O$, 14) = "TREASURE CHEST" THEN GOTO 950050
  2137.  
  2138.         R$ = "THAT ISN'T SOMETHING YOU CAN OPEN!": RETURN
  2139.  
  2140.  
  2141. 950050  REM     WANTS TO OPEN CHEST
  2142.         REM     IS THERE A CHEST IN THE ROOM?
  2143.         IF RITEM(RM, DL) <> 3 THEN R$ = "THERE IS NO CHEST IN THIS ROOM.": RETURN
  2144.  
  2145.         REM     THERE IS A CHEST, IS IT ALREADY OPENED?
  2146.  
  2147.         IF CHESTOPEN(RM, DL) = 0 THEN R$ = "THE CHEST HAS ALREADY BEEN OPENED. IT IS EMPTY!": RETURN
  2148.  
  2149.  
  2150.         REM     THE CHEST IS CLOSED, WHATS IN IT?
  2151.  
  2152.         DP = INT(RND(1) * 5) + 1
  2153.         DWQ = INT(RND(1) * 5) + 1: DWQ = DWQ * DL
  2154.         GOP = INT(RND(1) * 25) + 1: GOP = GOP * DL
  2155.  
  2156.         IF DP = 1 THEN R$ = "THE CHEST WAS TRAPPED WITH AN ARROW TRAP! YOU LOSE " + STR$(DWQ) + " H.P.": HP = HP - DWQ: CHESTOPEN(RM, DL) = 0: RETURN
  2157.         IF DP = 2 THEN R$ = "THE CHEST IS EMPTY!": CHESTOPEN(RM, DL) = 0: RETURN
  2158.         GP = GP + GOP
  2159.         R$ = "THE CHEST CONTAINED " + STR$(GOP) + " GOLD PIECES. YOU GRABBED THE GOLD.": CHESTOPEN(RM, DL) = 0: RETURN
  2160.  
  2161.        
  2162.  
  2163. 960000  REM     GET OR PICK - UP SOMETHING
  2164.  
  2165.         IF RIGHT$(O$, 5) = "SWORD" THEN GOTO 960050
  2166.  
  2167.         IF RIGHT$(O$, 5) = "CHEST" THEN R$ = "THE CHEST IS TO HEAVY AND CAN'T BE PICKED UP!": RETURN
  2168.         IF RIGHT$(O$, 6) = "POTION" THEN R$ = "TRY 'DRINK POTION' OR 'LOOK AT POTION'.": RETURN
  2169.  
  2170.         R$ = "YOU CAN'T PICK THAT UP.  TYPE 'HELP' FOR HELP.": RETURN
  2171.  
  2172. 960050  REM     WANTS TO PICK UP A SWORD
  2173.  
  2174.         REM     IS THERE A SWORD IN THIS ROOM
  2175.         IF RITEM(RM, DL) <> 2 THEN R$ = "THERE IS NO SWORD IN THIS ROOM.": RETURN
  2176.  
  2177.  
  2178.         REM     THERE IS A SWORD, IS IT MAGIC OR CURSED
  2179.  
  2180.         RITEM(RM, DL) = 6
  2181.  
  2182.  
  2183.         R$ = "AS YOU PICK UP THE SWORD, YOUR OLD WEAPON MAGICALLY DISAPPEARS INTO THIN AIR!"
  2184.  
  2185.         DF = INT(RND(1) * 2) + 1
  2186.         IF DF = 1 THEN GOTO 960060: REM MAGIC SWORD
  2187.  
  2188.         
  2189.  
  2190.         MWP = INT(RND(1) * 2) + 1: MWP = MWP * DL: MWP = -(MWP)
  2191.  
  2192.         F1$ = "THE SWORD IS CURSED! IT IS A " + STR$(MWP) + " SWORD!"
  2193.         F2$ = "THAT MEANS IT WILL DO " + STR$(MWP) + " LESS HP OF DAMAGE WHEN YOU HIT OPPONENTS WITH IT."
  2194.         RETURN
  2195.  
  2196. 960060  REM     MAGIC SWORD
  2197.  
  2198.         MWP = INT(RND(1) * 2) + 1: MWP = MWP * DL
  2199.  
  2200.         F1$ = "THE SWORD IS MAGIC!  IT IS A +" + STR$(MWP) + " SWORD!"
  2201.  
  2202.         F2$ = "THAT MEANS IT WILL DO +" + STR$(MWP) + " MORE HP OF DAMAGE WHEN YOU HIT OPPONENTS WITH IT."
  2203.  
  2204.         RETURN
  2205.  
  2206.  
  2207.  
  2208.  
  2209. 975000          REM     LIST SPELLS COMMAND
  2210.  
  2211.                 CLS
  2212.                 PRINT "HERE IS A LIST OF SPELLS AVAILABLE IN THE GAME, BUT NOT NECESSARILY TO YOUR"
  2213.                 PRINT "CHARACTER IN THIS GAME."
  2214.                 PRINT
  2215.                 PRINT
  2216.                 FOR ASW = 1 TO 5
  2217.                 PRINT SPELL$(ASW)
  2218.                 PRINT SPELLDESC$(ASW)
  2219.                 PRINT
  2220.  
  2221.                 NEXT
  2222.                 PRINT
  2223.                 PRINT
  2224.                 PRINT "HIT <ENTER> TO RETURN TO GAME";
  2225.                 GOSUB 50000
  2226.                 RETURN
  2227.  
  2228.  
  2229.  
  2230. 990000  REM     GIVE GOLD TO MONSTER
  2231.  
  2232.         IF RIGHT$(O$, 6) = "DRAGON" THEN GOTO 990010
  2233.  
  2234.         R$ = "I DON'T UNDERSTAND?!T?!?!?O?!?!!?!D!?!R!?!A!?!G!?!O?!?N!?!?!": RETURN
  2235.  
  2236. 990010  IF RMONSTER(RM, DL) = 1 THEN GOTO 990020
  2237.         R$ = "THERE IS NO DRAGON IN THIS ROOM.": RETURN
  2238.  
  2239. 990020  IF ALIVE(RM, DL) = 1 THEN GOTO 990030
  2240.        
  2241.         GG = GP / 2
  2242.         GP = GP - GG
  2243.        
  2244. 990021  CLS
  2245.         PRINT "YOU GENEROUSLY PLACE ";
  2246.         PRINT GG; " GOLD PIECES ON THE DEAD DRAGON."
  2247.         PRINT "SUDDENLY AN EERIE FOGGY MIST MAGICALLY FILLS THE ROOM."
  2248.         PRINT "A WIZARD APPEARS AND OFFERS YOU YOUR CHOICE OF ONE OF THE"
  2249.         PRINT "FOLLOWING ITEMS IN EXCHANGE FOR THE REMAINDER OF YOUR GOLD."
  2250.         PRINT
  2251.         PRINT "<1> MAGICAL ARMOR (GIVES YOU AC 1)"
  2252.         PRINT "<2> +20 LONG SWORD  "
  2253.         PRINT "<3> DOUBLE YOUR HIT POINTS"
  2254.         PRINT
  2255.         PRINT "IF YOU WOULD LIKE TO ACCEPT HIS OFFER, TYPE IN THE NUMBER"
  2256.         PRINT "OF THE ITEM YOU WOULD LIKE, OR TYPE '9' TO REFUSE."
  2257.         GOSUB 50000
  2258.         IF O$ = "1" THEN ARM = 9: AC = 1: PRINT : PRINT "YOU TAKE THE MAGICAL ARMOR & HE TAKES ALL OF YOUR GOLD!": GP = 0: GOTO 990025
  2259.         IF O$ = "2" THEN MWP = 20: PRINT : PRINT "YOU TAKE THE +20 SWORD & HE TAKES ALL OPF YOUR GOLD.": GP = 0: GOTO 990025
  2260.         IF O$ = "3" THEN HPC = HPC * 2: HP = HPC: PRINT "YOU TAKE THE HIT POINTS & HE TALES ALL OF YOUR GOLD.": GP = 0: GOTO 990025
  2261.         IF O$ = "9" THEN PRINT "YOU OPT TO TAKE NOTHING, & THE WIZARD FROWNS AT YOU IN SORROW.": GOTO 990025
  2262.  
  2263.         GOTO 990021
  2264.  
  2265.  
  2266.  
  2267. 990025  PRINT
  2268.         PRINT "SUDDENLY, THE WIZARD BEGINS TO FADE AWAY ALONG WITH THE"
  2269.         PRINT "MIST.  YOU ARE IN A ROOM, BUT IT CERTAINLY IS NOT THE SAME"
  2270.         PRINT "ROOM WHERE YOU WERE BEFORE!"
  2271.         PRINT
  2272.         PRINT "HIT <ENTER> TO CONTINUE";
  2273.         GOSUB 50000
  2274.  
  2275.         RMONSTER(RM, DL) = 0
  2276.         ALIVE(RM, DL) = 0
  2277.         RM = INT(RND(1) * 10) + 1
  2278.         DL = INT(RND(1) * 10) + 1
  2279.         RETURN
  2280.  
  2281.  
  2282.  
  2283.  
  2284.  
  2285.  
  2286.  
  2287.  
  2288.  
  2289.  
  2290.  
  2291. 990030  GG = GP / 2
  2292.         GP = GP - GG
  2293.         R$ = "YOU HAND THE DRAGON " + STR$(GG) + " GOLD PIECES."
  2294.         F1$ = "HE BREATHES A FLAME ON THEM & MELTS THEM TO GOLD LIQUID!"
  2295.         F2$ = "THE LIQUID IS BARELY EXISTENT.  HE ROARS & PREPARES TO ATTACK YOU!"
  2296.         RETURN
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306. 50001002    REM SET UP MAP
  2307.         FOR XX = 1 TO VAL(RIGHT$(TIME$, 2))
  2308.         ZZ = INT(RND(1) * 2000) + 1
  2309.         NEXT
  2310.         RM = 1
  2311.  
  2312. 50001003    REM SET UP ROOM
  2313.  
  2314.         FOR L = 1 TO 10: REM L = DUNGEON LEVEL
  2315.  
  2316.         DUNGEON = 2
  2317.  
  2318.         RSIZE(1, L) = INT(RND(1) * 6) + 1
  2319.         RDOOR(1, L) = 3: N(1, L) = 0: S(1, L) = 3: W(1, L) = 0: E(1, L) = 0
  2320.         RITEM(1, L) = INT(RND(1) * 6) + 1: IF RITEM(1, L) = 3 THEN CHESTOPEN(1, L) = 1
  2321.         RMONSTER(1, L) = INT(RND(1) * 10) + 1
  2322.       
  2323.         RSIZE(2, L) = INT(RND(1) * 6) + 1
  2324.         RDOOR(2, L) = 3: N(2, L) = 0: S(2, L) = 5: W(2, L) = 0: E(2, L) = 3
  2325.         RITEM(2, L) = INT(RND(1) * 6) + 1: IF RITEM(2, L) = 3 THEN CHESTOPEN(2, L) = 1
  2326.         RMONSTER(2, L) = INT(RND(1) * 10) + 1
  2327.       
  2328.         RSIZE(3, L) = INT(RND(1) * 6) + 1
  2329.         RDOOR(3, L) = 1: N(3, L) = 1: S(3, L) = 6: W(3, L) = 2: E(3, L) = 0
  2330.         RITEM(3, L) = INT(RND(1) * 6) + 1: IF RITEM(3, L) = 3 THEN CHESTOPEN(3, L) = 1
  2331.         RMONSTER(3, L) = INT(RND(1) * 10) + 1
  2332.       
  2333.         RSIZE(4, L) = INT(RND(1) * 6) + 1
  2334.         RDOOR(4, L) = 5: N(4, L) = 0: S(4, L) = 0: W(4, L) = 0: E(4, L) = 5
  2335.         RITEM(4, L) = INT(RND(1) * 6) + 1: IF RITEM(4, L) = 3 THEN CHESTOPEN(4, L) = 1
  2336.         RMONSTER(4, L) = INT(RND(1) * 10) + 1
  2337.       
  2338.         RSIZE(5, L) = INT(RND(1) * 6) + 1
  2339.         RDOOR(5, L) = 7: N(5, L) = 2: S(5, L) = 8: W(5, L) = 4: E(5, L) = 6
  2340.         RITEM(5, L) = INT(RND(1) * 6) + 1: IF RITEM(5, L) = 3 THEN CHESTOPEN(5, L) = 1
  2341.         RMONSTER(5, L) = INT(RND(1) * 10) + 1
  2342.       
  2343.         RSIZE(6, L) = INT(RND(1) * 6) + 1
  2344.         RDOOR(6, L) = 7: N(6, L) = 3: S(6, L) = 9: W(6, L) = 5: E(6, L) = 7
  2345.         RITEM(6, L) = INT(RND(1) * 6) + 1: IF RITEM(6, L) = 3 THEN CHESTOPEN(6, L) = 1
  2346.         RMONSTER(6, L) = INT(RND(1) * 10) + 1
  2347.       
  2348.         RSIZE(7, L) = INT(RND(1) * 6) + 1
  2349.         RDOOR(7, L) = 6: N(7, L) = 0: S(7, L) = 0: W(7, L) = 6: E(7, L) = 0
  2350.         RITEM(7, L) = INT(RND(1) * 6) + 1: IF RITEM(7, L) = 3 THEN CHESTOPEN(7, L) = 1
  2351.         RMONSTER(7, L) = INT(RND(1) * 10) + 1
  2352.       
  2353.         RSIZE(8, L) = INT(RND(1) * 6) + 1
  2354.         RDOOR(8, L) = 1: N(8, L) = 5: S(8, L) = 10: W(8, L) = 0: E(8, L) = 0
  2355.         RITEM(8, L) = INT(RND(1) * 6) + 1: IF RITEM(8, L) = 3 THEN CHESTOPEN(8, L) = 1
  2356.         RMONSTER(8, L) = INT(RND(1) * 10) + 1
  2357.       
  2358.         RSIZE(9, L) = INT(RND(1) * 6) + 1
  2359.         RDOOR(9, L) = 2: N(9, L) = 6: S(9, L) = 0: W(9, L) = 0: E(9, L) = 0
  2360.         RITEM(9, L) = INT(RND(1) * 6) + 1: IF RITEM(9, L) = 3 THEN CHESTOPEN(9, L) = 1
  2361.         RMONSTER(9, L) = INT(RND(1) * 10) + 1
  2362.  
  2363.         RSIZE(10, L) = INT(RND(1) * 6) + 1
  2364.         RDOOR(10, L) = 2: N(10, L) = 8: S(10, L) = 0: W(10, L) = 0: E(10, L) = 0
  2365.         RITEM(10, L) = INT(RND(1) * 6) + 1: IF RITEM(10, L) = 3 THEN CHESTOPEN(10, L) = 1
  2366.         RMONSTER(10, L) = INT(RND(1) * 10) + 1
  2367.  
  2368.        
  2369.  
  2370.         NEXT L
  2371.  
  2372.  
  2373.  
  2374.         FOR SR = 1 TO 10
  2375.  
  2376.  
  2377.         S = INT(RND(1) * 10) + 1
  2378.         STEPS(S, SR) = 1: REM S = ROOM#,SR = DUNGEON LEVEL
  2379.       
  2380.  
  2381.        
  2382.  
  2383.         NEXT SR
  2384.        
  2385.  
  2386.  
  2387.  
  2388.         STP(S, 1) = 1: REM COMPUTER KNOWS STEPS ARE IN ROOM
  2389.        
  2390.  
  2391.         FOR LP = 1 TO 10
  2392.  
  2393.         IF STEPS(1, LP) = 1 THEN STEPSONLEVEL(LP) = 1
  2394.         IF STEPS(2, LP) = 1 THEN STEPSONLEVEL(LP) = 2
  2395.         IF STEPS(3, LP) = 1 THEN STEPSONLEVEL(LP) = 3
  2396.         IF STEPS(4, LP) = 1 THEN STEPSONLEVEL(LP) = 4
  2397.         IF STEPS(5, LP) = 1 THEN STEPSONLEVEL(LP) = 5
  2398.         IF STEPS(6, LP) = 1 THEN STEPSONLEVEL(LP) = 6
  2399.         IF STEPS(7, LP) = 1 THEN STEPSONLEVEL(LP) = 7
  2400.         IF STEPS(8, LP) = 1 THEN STEPSONLEVEL(LP) = 8
  2401.         IF STEPS(9, LP) = 1 THEN STEPSONLEVEL(LP) = 9
  2402.         IF STEPS(10, LP) = 1 THEN STEPSONLEVEL(LP) = 10
  2403.  
  2404.        
  2405.        
  2406.        
  2407.  
  2408.  
  2409.  
  2410.  
  2411.  
  2412.  
  2413.  
  2414.         FOR XX = 1 TO 10
  2415.         IF RMONSTER(XX, LP) < 7 THEN ALIVE(XX, LP) = 1: GOSUB 60000
  2416.         NEXT XX
  2417.         NEXT LP
  2418.  
  2419.  
  2420.  
  2421.                    DL = LVL: IF LVL > 10 THEN DL = 10
  2422.         GOTO 1005
  2423.  
  2424.